Xcode 在编译时检查iOS10或更低版本

Xcode 在编译时检查iOS10或更低版本,xcode,notifications,swift2,ios10,Xcode,Notifications,Swift2,Ios10,我正在使用UNUserNotificationCenter实现新通知。但我需要保持向后兼容,因此我到处都有检查: if #available(iOS 10.0, *) { ... } else { ... } 在iOS10中,它似乎工作得很好。为了能够使用UNUserNotificationCenter框架,我必须导入: import NotificationCenter 但它使iOS9.3崩溃,因为它不知道它是什么。 这是一个编译时操作,而不是运行时操作-因此这意味着我不能对导入设置条件

我正在使用UNUserNotificationCenter实现新通知。但我需要保持向后兼容,因此我到处都有检查:

if #available(iOS 10.0, *) { ... }
else { ... }
在iOS10中,它似乎工作得很好。为了能够使用UNUserNotificationCenter框架,我必须导入:

import NotificationCenter
但它使iOS9.3崩溃,因为它不知道它是什么。 这是一个编译时操作,而不是运行时操作-因此这意味着我不能对导入设置条件

@available(iOS 10.0, *)
class ....
在那里,导入也发生在类实现之前。
我应该如何解决这个问题?

尝试导航到构建阶段->将二进制文件链接到库并添加NotificationCenter,并将状态设置为“可选”而不是“必需”。

首先,您必须使用:

导入用户通知 用于本地通知

条件:Xcode 8 beta 6和Sierra beta 6

一些测试代码:

a) iOS 10仅适用于swift 3:

override func viewDidLoad() {
    super.viewDidLoad()

    // ADC site: 
    // Listing 1
    // Requesting authorization for user interactions
/*let center=UNUserNotificationCenter.currentNotificationCenter() requestAuthorizationWithOptions([.Alert,.Sound]){(已授予,错误)位于 } */

2) 支持iOS 9:(我已更改部署目标)


你的意思可能是“构建阶段”,我把它放在那里,没有任何改变。意思是:我不能从类中删除导入,它仍然需要它。我做错什么了吗?你得到这个是因为你导入了“通知中心”?
    // swift 3.0:
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
        // Enable or disable features based on authorization.
    }
    // swift 3.0:

    if #available(iOS 10.0, *) {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }

    } else {
        // Fallback on earlier versions
    }