定义以下三元运算符的最佳方法是什么?

[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ? x : y

我考虑使用宏
#define phonePad(x, y) ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ? x : y)

但是this article提到这可能不是最好的主意。有没有办法使用C函数来完成等效操作,或者这是实现它的最佳方法?

最佳答案

我不会为此使用宏。通过使用宏,您需要设备每次使用时检查用户界面惯用语,并相应地设置x或y。考虑制作一个新的方法,该方法根据接口习语返回。这可以是静态的,因为在运行时此值不可能更改。

- (id)determineXOrY {
    static id obj = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        obj = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ? x : y
    });

    return obj;
}

关于ios - iPhone/iPad宏还是c函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21769960/

10-11 00:22