【问题标题】:Why preprocessor directives not working为什么预处理器指令不起作用
【发布时间】:2016-11-18 14:23:09
【问题描述】:

我正在尝试根据版本为设备创建变量,但我的控制权总是转到 else 部分。我的 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

当我在运行时检查并使用断点时,我可以看到我的控件总是转到 else 部分,变量 addressBookRef 的类型是 ABAddressBook

请建议我做错了什么

【问题讨论】:

标签: ios swift swift2 preprocessor


【解决方案1】:

你不能用指令检查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
}

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多