@available api检查在Xcode 8中不起作用

Ami*_*mit 0 xcode objective-c xcode8

我正在编写Xcode 8.0中的objective-c代码,用于我正在使用的API可用性

 if (@available(iOS 11, *)) {
        // iOS 11 (or newer) ObjC code
 } else {
        // iOS 10 or older code
 }
Run Code Online (Sandbox Code Playgroud)

不幸的是编译器触发:

无法识别的平台名称iOS

为什么?

Cœu*_*œur 5

正如我在如何检查iOS版本中写的那样:

  • @available 在Xcode 9中添加了
  • #available 在Xcode 7中添加了

如果您需要测试多个版本的Xcode的可用性,您可以使用#ifdef __MAC_10_13或更好地检测Xcode 9 #if __clang_major__ >= 9,如下所示:

#if __clang_major__ >= 9
    // Xcode 9+
    if (@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)) {
        // iOS 8+
    }
#else
    // Xcode 8-
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_9_2) {
        // iOS 8+
    }
#endif
    else {
        // iOS 7-
    }
Run Code Online (Sandbox Code Playgroud)

案例来自:https://github.com/ZipArchive/ZipArchive/blob/master/SSZipArchive/SSZipArchive.m