为什么预处理程序指令不起作用
问题描述:
我试图根据版本为设备创建变量,但是我的控件始终转到其他部分。我的iOS 9.3为什么预处理程序指令不起作用
#if os(iOS) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
var addressBookRef : CNContactStore? = nil
#else
var addressBookRef : ABAddressBook? = nil
#endif
我也试着这样的建议here但defined
不采取在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
。
推荐请自己做错了什么,我做
答
您不能检查的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
}
如果使用**#如果**不要忘记添加**#endif ** – iSashok
我这样做,对不起,我没有在这里添加。忘记。让我更新 –
请参阅http://nshipster.com/swift-system-version-checking/ – Santosh