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语法,还是以建议的方式修复,使用快捷项启动应用程序都不会触发它.
这不是列为已知问题,在这里无论是.有人有想法吗?
该方法的签名现在是:
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中的文档,以获取定义问题方法的类/协议,以便您可以看到它的新定义是什么.