問題タブ [default-implementation]
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.
swift - 実装されたプロトコルの静的メソッドをどのように区別しますか?
インスタンス関数の場合、キャストは問題なく機能します。
swift - プロトコルに型が関連付けられている場合に、通常のメソッドからプロトコルのデフォルト実装を呼び出す
デフォルトのパラメーターを持つ静的メソッドを持つプロトコルがあります。プロトコルを実装するクラスのデフォルト値を変更したい。クラスやスーパーで簡単にできることを本質的にやっています。
プロトコルに関連付けられたタイプがない場合にのみ解決策があります。
次のコードは機能しますが、関連する型宣言のコメントを外すとすぐにコンパイルされません。
コンパイルされない理由は理解できます:Protocol
の具体的な型がありませんAssociatedType
。
したがって、質問は「プロトコルを明示的に特化できますか?」と読むべきかもしれませんが、それに対する答えはノーだと思います。
部分的な回避策があります。しかし、それが機能するときでさえ、それはひどいです。
特に、公開されているライブラリを作成していると考えるとsayHello
、次の回避策により、公開する必要があるが役に立たない2番目のプロトコルを作成する必要があります。
回避策は次のとおりです。
しかし、私sayHello
は関連付けられた型を使用しているため、これはうまくいきません。したがって、別のプロトコルに抽出することはできません。
私が明確であることを確認するために、ここに私が望むものがあります。プロトコルのクラスを置き換えるだけです:
types - すべての特性オブジェクトのデフォルトの特性メソッドの実装
私は trait を持っていて、すべての trait オブジェクトを互いに比較できるようにしMyTrait
たいのです。私は今、特性オブジェクト間の同等性をテストする方法に&MyTrait
基づいていますか? .
問題はMyTraitComparable
、代わりにどこでも使用する必要があることですMyTrait
。これを回避する方法はありますか?
デフォルトの実装に移動as_any
しequals
て提供しようとしましたが、MyTrait
self
その場合は使えないと思うのでダメです。- 使用する
trait MyTrait: PartialEq
と、特性オブジェクトを作成できなくなります。