为什么预处理程序指令不起作用

为什么预处理程序指令不起作用

问题描述:

我试图根据版本为设备创建变量,但是我的控件始终转到其他部分。我的iOS 9.3为什么预处理程序指令不起作用

#if os(iOS) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 
    var addressBookRef : CNContactStore? = nil 
#else 
    var addressBookRef : ABAddressBook? = nil 
#endif 

我也试着这样的建议heredefined不采取在Swift2.x

#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 
    var addressBookRef : CNContactStore? = nil 
#else 
    var addressBookRef : ABAddressBook? = nil 
#endif 

当我在运行时检查和使用断点,我可以看到,我的控制总是去其他部分和变量addressBookRef是类型ABAddressBook

推荐请自己做错了什么,我做

+1

如果使用**#如果**不要忘记添加**#endif ** – iSashok

+0

我这样做,对不起,我没有在这里添加。忘记。让我更新 –

+3

请参阅http://nshipster.com/swift-system-version-checking/ – Santosh

您不能检查的iOS版本的指令,你需要在运行时进行检查。

如果您使用的是iOS 8.0或更高版本,你可以使用这个:

let os = NSProcessInfo().operatingSystemVersion 
switch (os.majorVersion, os.minorVersion, os.patchVersion) { 
case (8, 0, _): 
    // 8.0.0 and < 8.1.0 
case (8, _, _): 
    // 8.1.0 and < 9.0 
case (9, _, _): 
    // 9.0.0 
default: 
    // 
} 

您还可以使用UIDevice.currentDevice().systemVersion这也将在iOS 7的工作:

switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) { 
case .OrderedSame, .OrderedDescending: 
    // >= 8.0 
case .OrderedAscending: 
    // < 8.0 
}