2016-08-12 50 views
5

我正在使用UNUserNotificationCenter实施新通知。但我需要保持向后兼容,因此我必须检查所有的地方:在编译时检查iOS10或更低版本

if #available(iOS 10.0, *) { ... } 
else { ... } 

这似乎在iOS10做工精细。为了能够使用UNUserNotificationCenter框架,我不得不进口:

import NotificationCenter 

但它崩溃了iOS9.3,因为它不知道它是什么。 这是一个编译时的动作,而不是运行时的动作 - 所以这意味着我不能把条件对我创建一个单独的类imports.If,并把

@available(iOS 10.0, *) 
class .... 

那里的进口也在课前发生的事情实现。 我应该如何解决这个问题?

+0

你得到这一点,因为你进口的 “通知中心”? – MCMatan

回答

1

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

+0

你可能意思是“建立阶段”,我把它放在那里,没有任何改变。 –

+0

含义:我无法从类中移除输入,它仍然需要它。难道我做错了什么? –

0

首先你必须使用:

进口UserNotifications 本地通知。

条件:Xcode的8个β6和塞拉利昂beta6

一些测试代码:

一个)的iOS 10仅用于迅速3:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // ADC site: 
    // Listing 1 
    // Requesting authorization for user interactions 

/*让中心= UNUserNotificationCenter.currentNotificationCenter( ) center.requestAuthorizationWithOptions([。Alert,.Sound]){(granted,error)in } */

// swift 3.0: 
    let center = UNUserNotificationCenter.current() 
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in 
     // Enable or disable features based on authorization. 
    } 

2)支持的iOS 9:(我已经改变了部署目标)

// 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 
    }