問題タブ [protocol-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
413 参照

ios - 拡張プロトコルを使用した Swift 2.0 での複数のプロトコル継承

Swift 2.0 の新しい拡張プロトコルで遊ぶには、次の例を使用します。

多重継承」のようなもので、もちろんPythonやC++などの一部の言語は多重継承として処理できます。私が本当に驚いたのは、Xcode 7.0 Beta 4 で発生した 2 つのコンパイル エラーです。

タイプ「C」はプロトコル「A」に準拠していません


タイプ「C」はプロトコル「B」に準拠していません

しかし、このエラーは意味がありません。エラーは、プロトコルAと関数Bの使用に関する競合またはあいまいさなどを反映している必要があるためです。foo

上記のコードの下に次の行を追加すると:

これはまさに私が話しているエラータイプを起動します:

「foo」のあいまいな使用

ここでの私の質問は次のとおりです。

Swift 2.0 に拡張プロトコルが新たに追加されたことで、Apple はこの種の「多重継承」(C++ 処理の方法のようなもの) の処理を​​検討しましたか、それともまったく許可されていませんか?

0 投票する
1 に答える
557 参照

swift - 異なるクラスを拡張するときの「プロトコルに準拠していません」エラー

URLSessionおよびURLSessionDataTaskプロトコルに適応するオブジェクトを注入して、独自のクラスをテストしようとしています。これらのプロトコルを拡張NSURLSessionNSURLSessionDataTaskて採用し、既存のオブジェクトを通常どおり使用できるようにしますが、単体テストではテスト オブジェクトを使用します。

エラーがコメントされた次のコードがあります。

エラーを理解しました。私のプロトコルは、によって実装されているメソッドと正確に一致しませんNSURLSession。これを修正するにはどうすればよいですか?

0 投票する
2 に答える
5325 参照

swift - プロトコル拡張で定義されている場合、プロトコルで静的メソッドを呼び出す方法は?

XcodeはCar.foo()正しくオートコンプリートするので、私が尋ねているのは、それがコンパイルされないバグであるかどうかです(foo()という名前のメンバーがないと言います)。プロトコル拡張で定義されている場合、静的メソッドをプロトコルで直接呼び出すことができますか?

0 投票する
3 に答える
10895 参照

objective-c - Objective-c でアクセスされるプロトコルの拡張機能で定義されたメソッドを Swift できる

Objective-C から Swift のプロトコル拡張で定義されたメソッドを呼び出すことは可能ですか?

例えば:

のインスタンスの価格文字列IceCreamは「$2」であり、Swift でアクセスできますが、メソッドは Objective-C では表示されません。コンパイラは、「'IceCream' の可視の @interface がセレクターを宣言していません ...」というエラーをスローします。

私の構成では、メソッドが Swift オブジェクトの実装で直接定義されている場合、すべてが期待どおりに機能します。すなわち:

0 投票する
5 に答える
8760 参照

ios - Swiftはプロトコル拡張を通知オブザーバーにします

次のコードを考えてみましょう。

次に、A を実装する UIViewController サブクラスを見てください。

しかし驚くべきことに、これはエラーでクラッシュします:

keyboardDidShow:]: 認識されないセレクターがインスタンス 0x7fc97adc3c60 に送信されました

ビューコントローラー自体にオブザーバーを実装する必要がありますか? エクステに残らないの?

以下のことはすでに試しました。

A をクラス プロトコルにします。署名としてプロトコル自体に keyboardDidShow を追加します。