問題タブ [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 投票する
4 に答える
1358 参照

ios - 要素が指定されたプロトコルに準拠している場合、プロトコルに準拠するように配列を拡張します

私はこのようなことをしたいのですが、正しい構文を取得したり、それを書くための正しい方法を提供するWeb上の場所を見つけることができません:

したがって、この配列の要素が に準拠している場合にのみArray、プロトコルに準拠したいと考えています。JSONDecodeableJSONCollectionElement

これは可能ですか?もしそうなら、構文は何ですか?

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

swift - プロトコル拡張のSwiftプロパティオブザーバー?

次の点を考慮してください。

vmプロパティを観察し、bind注入されるたびに呼び出すようにしています。しかし、これは次のようなエラーでコンパイルされません:

拡張機能には保存されたプロパティが含まれていない可能性があります

storedプロトコルはプロパティをorにすることを強制できないため、これは理にかなっていますcomputed

これを導入せずに達成することは可能class inheritanceですか?

つまり、プロトコル拡張内のプロパティの変化を観察できますか?

0 投票する
4 に答える
1808 参照

ios - プロトコル拡張でのターゲット アクションの追加が失敗する

メニューバーボタンを持つビューコントローラーのセットがあります。それらのviewControllerが採用するためのプロトコルを作成しました。また、プロトコルを拡張してデフォルトの機能を追加しました。

私のプロトコルは次のようになります

そして、拡張機能は次のようになります。

私のviewControllerはプロトコルを採用しています-

ボタンがうまく表示されるようになりましたが、クリックするとアプリがクラッシュします

ViewController 内にメソッドを実装すると、正常に動作します。しかし、プロトコルに準拠するすべてのviewControllerでコードを複製します。

ここで何か間違っていますか?前もって感謝します。

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

swift - 共有関連型を持つ別のプロトコルを実装する Swift プロトコル拡張

次の点を考慮してください。

このコードはコンパイルされます。しかし、関連付けられた type の明示的な定義をコメントアウトするとtypealias A = String、何らかの理由で、swiftc は型の推測に失敗します。

これは、同じ関連付けられた型を共有する 2 つのプロトコルに関係していると感じていますが、たとえば、型のパラメーター化 (おそらく関連付けられた型は強力ではないか、十分に成熟していないのでしょうか?) による直接的なアサーションはなく、型の推論が曖昧になります。

これが言語のバグ/未熟なのかどうかはわかりません。それとも、この動作に正当につながるプロトコル拡張のニュアンスが欠けているのかもしれません。

誰かがこれに光を当てることができますか?

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

objective-c - Objective-C 型の Swift 2 プロトコル拡張と適合性

私は次のような設定をしています:

そして、次のような Swift プロトコル:

新しいSwiftファイルで、私はこれをやろうとしています:

Xcode で「タイプ 'Model' はプロトコル 'Syncable' に準拠していません」というエラーが表示され続けます。Xcode はまた、拡張機能のどこかに を配置することを提案し続けますが、@objcどこに行けばよいのかわかりません。

私がしていることは不可能ですか?(遊び場での単純な条件下で動作するようですが、私のObjective-Cクラスは明らかにSwiftで書かれています)。

それが不可能な場合は、その理由を理解するのに役立ちます。

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

ios - クラスプロトコルで willSet のデフォルト実装を作成することは可能ですか?

私がやろうとしているのは、オブジェクトがサービス オブジェクトからデリゲートとして置き換えられたときにオブジェクトに通知することです。willSet のデフォルトの実装を作成する方法があるかどうか疑問に思っていたので、作成するサービス オブジェクトごとにコードを複製する必要はありません。

拡張機能の構文をどこから始めるべきか、またはこれが可能かどうかは本当にわかりません。上記のコードのエラーは 'willSet' 行にあります: "Exspected definition" お時間をいただきありがとうございます。まだ可能かどうかはわかりませんが、定義されたデリゲート オブジェクトに確実にアクセスできるようにいくつかの編集を行いました。

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

swift - プロトコル拡張 - 一致するプロパティが見つかりません

次のプロトコル定義を使用します。

そしてそれらを実装するクラス:

エラーが発生します:

MyPresenter はプロトコル Activable に準拠していません

ただし、依存関係をプロトコルではなく具象クラスとして再定義すると、次のようになります。

すべてが桃です。プロトコルの関連付けられたタイプが具体的なタイプではなく、さらに別のプロトコルに解決される場合、プロトコル拡張の一致に問題があるようです。

だから私は疑問に思っていました:私は何かが足りないのですか?これは既知の問題ですか? 回避策を知っていますか?

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

ios - Swift 2 プロトコル拡張の使用

私は Swift 2 を使用して、このプロトコル指向プログラミングのクールさに追いつこうとしていますが、現在はかなり迷っています。

私は理論を実際のユースケースに適用しようとしているので、最も明白なものから始めましょう:

私が を持っていて、目的の動作を達成するためにメソッドに準拠してオーバーライドするUITextField多くのプロトコル (電話、数値、長さ制限など) を持ちたいとしましょう。UITextFieldDelegatetextField:shouldChangeCharactersInRange:replacementString

「Extensions.swift」ファイルにこの拡張子を付けて、目的のプロトコルをUITextField(数値、長さ制限など) に割り当てることさえ可能ですか? それは非常に便利です。もしそうなら、プロトコルをUITextFieldコンセントに割り当てる方法はありますか、それとも a をサブクラス化しUITextFieldて目的のプロトコルに準拠させる必要がありますか? この場合、古き良きサブクラス化よりもプロトコル拡張を使用する利点があまりないと思います。