iOS 三元条件运算符实现仅在设备上挑剔?

Posted

技术标签:

【中文标题】iOS 三元条件运算符实现仅在设备上挑剔?【英文标题】:iOS ternary conditional operator implementation is picky only on device? 【发布时间】:2011-03-05 16:24:37 【问题描述】:

我使用的是 ios SDK 4.2。

我认为三元条件运算在模拟器(iPhone4.1、4.2、iPad 3.2、4.2)上的实现方式与在实际设备上的实现方式不同。因为:

iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";

在这些模拟器上完美运行,但在我的 iPhone 4 (4.1) 上失败

这样写的时候:

xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";

允许它在模拟器和设备上工作。

谁能说出原因?这是一个错误吗? “第二版”更好吗?我应该一直这样写吗?

奇怪的是编译器如何接受两者,模拟器如何同时使用,但设备只接受一个......也许是苹果要检查的错误?

【问题讨论】:

【参考方案1】:

这些语句不等价。

// iPad ? xibName = @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) 
    xibName = @"MyViewController-iPad";
 else 
    @"MyViewController"; // Effectively a NOP


// xibName = (iPad) ? @"MyViewController-iPad" : @"MyViewController";
if ( iPad ) 
    xibName = @"MyViewController-iPad";
 else 
    xibName = @"MyViewController";

对于!iPad(比如在 iPhone 4 上),第一个语句 xibName 根本不会设置,我猜你只运行了 iPad 模拟器,而不是 iPhone。

【讨论】:

正如我所写,我确实运行了以下模拟程序:iPad 3.2、iPad 4.2、iPhone 4.1、iPhone 4.2。它在每种情况下都正确加载了xib。我知道我的初始代码有点不正确,我感谢您的解释(它很好地清除了“转换为 if”)。无论如何,有趣的是模拟人生如何“正确”评估代码而设备没有

以上是关于iOS 三元条件运算符实现仅在设备上挑剔?的主要内容,如果未能解决你的问题,请参考以下文章

C中的三元(条件)运算符

为啥 Swift 的三元运算符对空格如此挑剔?

三元运算符

Python 三元运算

三元运算符

这些在 React 中使用三元运算符有条件地应用内联样式的方法在性能上是不是有任何差异?