在Swift 3/Xcode 8 beta 6中没有调用UIApplicationShortcutItem的AppDelegate函数

Naf*_*der 2 xcode uiapplicationdelegate ios swift3 uiapplicationshortcutitem

Swift 3转换器改变了这条(功能完备)线:

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
Run Code Online (Sandbox Code Playgroud)

对此:

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
Run Code Online (Sandbox Code Playgroud)

但两者都产生了警告

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

并提供制作功能private或添加的解决方案@nonobjc.

无论函数是保留警告,还是恢复为Swift 2语法,还是以建议的方式修复,使用快捷项启动应用程序都不会触发它.

这不是列为已知问题,在这里无论是.有人有想法吗?

ric*_*ter 5

方法的签名现在是:

optional func application(_ application: UIApplication, 
          performActionFor shortcutItem: UIApplicationShortcutItem,
                      completionHandler: @escaping (Bool) -> Void)
Run Code Online (Sandbox Code Playgroud)

注意:完成处理,现在@escaping,每SE-103(使非逃逸关闭默认值).此属性更改了闭包参数的类型签名,后者又更改了它作为参数的方法的类型签名,因此不会调用带有旧声明的方法.

通常,编译器警告/修复对于捕获所有类型的签名更改并不是那么好,尤其是在测试版之间.您最好的办法是返回SDK标题(或者更确切地说,从它生成的Swift界面)或Apple的网站/ Xcode中的文档,以获取定义问题方法的类/协议,以便您可以看到它的新定义是什么.