#if __IPHONE_OS_VERSION_MAX_ALLOWED> =在Swift中等效100000

时间:2017-07-01 15:36:37

标签: ios swift3 xcode8

什么是Swift语法:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
//...
#endif

2 个答案:

答案 0 :(得分:1)

对于最大操作系统版本,没有#if编译时指令的直接模拟,但根据更广泛的目标,您可以使用一些技术:

  1. Swift中有一个#if指令用于语言版本(但不是OS版本)。请参阅"条件编译块" The Swift Programming Language: Language Reference: Statements的部分。例如:

    #if swift(>=3.0)
    func foo(with array: [Any]) {
        print("Swift 3 implementation")
    }
    #else
    func foo(with array: [AnyObject]) {
        print("Swift 2 implementation")
    }
    #endif
    
  2. 您可以对操作系统版本执行#available 运行时检查。请参阅The Swift Programming Language: Control Flow的"检查API可用性部分。例如,UserNotifications框架可用于iOS 10,因此您可以执行以下操作:

    private func registerForLocalNotifications() {
        if #available(iOS 10, *) {
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { granted, error in
                guard granted && error == nil else {
                    // display error
                    print(error?.localizedDescription ?? "Unknown error")
                    return
                }
            }
        } else {
            let types: UIUserNotificationType = [.badge, .sound, .alert]
            let settings = UIUserNotificationSettings(types: types, categories: nil)
            UIApplication.shared.registerUserNotificationSettings(settings)
        }
    }
    
  3. 如果您的API仅在某些操作系统版本中可用,则可以使用@available指令。参见"声明属性" The Swift Programming Language: Language Reference: Attributes中的讨论以获取更多信息。例如:

    @available(iOS, introduced: 9.0, deprecated: 11.0)
    func someMethod() {
        // this is only supported iOS 9 and 10
    }
    

    或,

    @available(iOS 10.0, *)
    func someMethod() {
        // this is only available in iOS 10 and later
    }
    

答案 1 :(得分:0)

如果要对同一快速版本进行条件编译,可以将其用于ex。

let session = ASWebAuthenticationSession(url: URL(string: "https://my.com")!, callbackURLScheme: "") { (url, error) in }
#if compiler(>=5.1)
if #available(iOS 13.0, *) {
    session.presentationContextProvider = self
}
#endif

可以在swift --version

中找到编译版本