2

はスウィフト3変換器は、この(完全に機能する)ラインを変更しました警告AppDelegate機能8ベータ6

インスタンスメソッド 'アプリケーション(:handleActionWithIdentifier:for:completionHandler :)'に近いマッチオプション要件 'アプリケーション(:handleActionWithIdentifier:のため:completionHandler :)' プロトコル 'UIApplicationDelegate'

と機能privateを作る、または@nonobjcを添加する溶液を提供します。

機能が警告付きで残っているか、Swift 2構文に戻されているか、提案されたいずれかの方法で修正されても、ショートカット項目を使ってアプリを起動しても起動されません。

これは既知の問題として記載されていませんhere誰かがアイデアを持っていますか? Appleはスウィフト3ベータ版6 に@escapingタグを導入

答えて

4

that methodのシグネチャは、次のようになる:

optional func application(_ application: UIApplication, 
      performActionFor shortcutItem: UIApplicationShortcutItem, 
         completionHandler: @escaping (Bool) -> Void) 

完了ハンドラがSE-103 (Make non-escaping closures the default)当たり、今@escapingであることに注意してください。この属性は、closureパラメータの型シグネチャを変更します。この型シグネチャは、メソッドの型シグネチャを引数に変更します。したがって、古い宣言を使用するメソッドは呼び出されません。

一般に、コンパイラの警告/修正は、すべての型シグネチャの変更、特にベータ版の変更をキャッチするほど大きくありません。あなたの最善の策は、問題のメソッドを定義しているクラス/プロトコルのXcodeのAppleのサイトのdocumentation(SDKヘッダ)(またはSwiftインターフェイスから)に戻って新しい定義が何であるかを見ることです。

1

全てのクロージャはデフォルトで何もエスケープされませんので、あなたはエスケープ閉鎖をしたい場合、あなたはそのタグを与える必要があります。何らかの理由により、迅速な翻訳者はこのタグを追加しませんでしたが、以下のリンクの文書に従って、このタグを閉鎖の前に追加する必要があります。私はそれをテストしていないので、それだけで他のいくつかの理由のための警告を取り除くかもしれません

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler:@escaping (Bool) -> Void) 

:私のコードにクロージャを追加

https://developer.apple.com/reference/uikit/uiapplicationdelegate/1622935-application

は警告を削除しました。

関連する問題