注:私はこれをほとんど分かっていませんでした。まだ混乱。はSwift 3/iOS 10でcontinueUserActivityをトリガーできません
私はSwift 3でXc8b6でNSUserActivity処理を実装しようとしていますが、ハンドラプロトコルメソッドのメソッドシグネチャに問題があります。現在のドキュメントで
、方法があると言われている。
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool
これはほんの少しだけ私は迅速ヘッダインタフェースに表示されるものとは異なります。そこでは、修復の戻り値のタイプがスウィフトです。無効です。
私はこれをしようとすると、私が手にエラーがある:
のObjective-Cメソッド 'アプリケーション:継続:restorationHandler:' をしません ':継続restorationHandlerは:)アプリケーション(_' メソッドによって を提供試合 要件のセレクタ (「アプリケーション:continueUserActivity:restorationHandler:」)
私は、コンパイラの警告が今大きくないですが、私はそれは、このためのObj-Cのメソッドシグネチャを見つけています意味するためにこれを取る実現しかし、どういうわけか私の議論全く合わない。
私はこれと一緒にどこに行くべきか分かりません。そこにあるものと一致しますが、何かが間違っています。ランダムな推測とチェックはまだ私を助けていない。
興味深いことに、オートコンプリートは私に異なるメソッドシグネチャを与える:この約1
public func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: ([Any]?) -> Void) -> Bool
いいことは、それがコンパイルされることです。あまりうれしいことは、Spotlightからインデックスを作成したアイテムを選択してアプリを起動するときにトリガされないことです。
明らかに私のNSUserActionは正しくアプリケーションを識別して起動しました。私がここで紛失する可能性のあるものがありますか?復原を撃たないでしょうか?これは、iOS 9で正常に動作したプロジェクトから変換されていることに注意してください。
また、What's New With SearchのWWDCビデオでは、もう1つのバージョンのプロトコルメソッドシグネチャがあります。私はそれを試みたが、それはコンパイルされたが、どちらもトリガーしなかった。
スウィフト3の変換ツールを完了した後で、これを丸めて表示するだけのシグネチャです。これは、コンパイルされますが、スポットライトから起動したときにトリガされませんでした:
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]) -> Void) -> Bool
----更新-----
[OK]をクリックします。したがって、上記の最初のメソッドシグネチャは正しいものです。問題は、私がAppDelegateの拡張でそれを定義していたことです。これはSwift 2.xでうまくいきました。
私はそれを動かして、すべてうまくいきます。しかし、拡張からプロトコルメソッドを実装するときに、なぜこれらのコンパイルエラーが発生するのかをより深く理解したいと思います。それはもはやプロトコルの適合性を介して運ばれますか?拡張機能に追加しようとすると、重複していることを示すエラーが表示されるので、それはそれほど問題ではないと思います。
プロトコル拡張に関数を追加する場合は、元のプロトコル定義内で関数を追加することと同等です。そのため、重複しているというエラーが表示されます。プロトコルエクステンションが特定のタイプのみの場合は、別のストーリーです – user1046037
プロトコル拡張ではありませんでした。私は古い質問が答えられたので私は新しい質問を作成しなければならないでしょう。 簡潔に - 拡張はちょうどです: 拡張AppDelegate { 私はクラスを拡張していますが、プロトコルは拡張していません。 – jeffro37