应用程序(_:didFinishLaunchingWithOptions :)'几乎匹配可选要求

安装Xcode 8 beta 6后,我收到一个警告:

实例方法'application(_:didFinishLaunchingWithOptions :)'几乎匹配协议'UIApplicationDelegate'的可选要求'application(_:didFinishLaunchingWithOptions :)'

在我的应用程序委托。

有两个build议的解决办法来消除警告:

  1. 将该方法标记为私有
  2. 将@nonobjc添加到方法中

做或者沉默警告。 但为什么需要这样做呢?

此警告是由于application(_:didFinishLaunchingWithOptions:)委托方法的didFinishLaunchingWithOptions:参数现在作为[UIApplicationLaunchOptionsKey: Any]?桥接到Swift的事实[UIApplicationLaunchOptionsKey: Any]? ,而不是[NSObject : AnyObject]?

因此,您需要更新您的实施以反映此更改:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // ... } 

请注意,Xcode的build议修复都不能真正解决问题,它们只会隐藏您从Objective-C实现的application(_:didFinishLaunchingWithOptions:) – 意味着它永远不会被调用。

传递给函数的第一个参数不再具有外部名称。 这实际上只是一个小的细节,因为你不直接调用这个方法,而且这是编译器快乐的一个快速修复。 您可以手动编辑第一个参数名称为_,或者让Xcode为您处理。

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool 

或新的语法

 func application(_ application:UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool // or remove = nil and try 

你可以从这里获取苹果和样本链接的最新文档