定义以下三元运算符的最佳方法是什么?
[[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/