問題タブ [swift-extensions]
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.
generics - swift 2.0 のプロトコルに準拠した要素を使用した配列の拡張
含まれているオブジェクトが特定のプロトコルに準拠している場合にのみメソッドを追加するために、Array 構造体の拡張を作成しようとしていますが、クラスから拡張内のメソッドにアクセスしようとすると、奇妙な動作が発生します。
ここに遊び場の私のコードがあります
何が悪いのか何か考えはありますか??
swift - 特定のタイプの要素を持つ CollectionType の拡張は、サブタイプを無視します
特定の型 FooType の要素を含むコレクション型の拡張機能を作成しようとしていますが、これはうまく機能します:
私の問題は、Foo クラスのサブクラスを含むコレクション型に対してもこの拡張機能を機能させたいということです。
「==」演算子をオーバーライドして、一致するまでスーパークラスのチェーンをループすることもできますが、これが正しい方法かどうかはわかりません。
これを解決できるwhere句に何かが欠けていますか、それとも完全に間違っていますか?
swift - Swiftでは、Objective-CクラスのプロパティがSwift @objプロトコルの計算されたプロパティ要件を満たすことは可能ですか?
たとえば、既存の Objective-C クラスから Swift プロトコルを抽出したいと考えていますMyFoo
。このプロトコルを と呼びましょうFooProtocol
。
状況は次のようになります。
次に、これを行うことを許可する必要があります。
しかし、「MyFoo はプロトコル FooProtocol に準拠していません」と言われます。わかった。当然のことですが、プロトコル拡張には少しの調整が必要だと思います。
しかし、コンパイラから次のようなエラーが表示されます
私は何を間違っていますか?
swift - Swift Extension: 2 つのモジュールで同じ拡張機能
SwiftKit という名前のフレームワークがあるとします。このフレームワークには、someClassMethod という名前の UIView の拡張クラス メソッドと、その中に someProperty という名前のプロパティがあります。
また、SwiftFoundation という名前のフレームワークもあります。このフレームワークには、someClassMethod という名前の UIView の拡張クラス メソッドと、その中に someProperty という名前のプロパティがあります。
次に、これらのフレームワークを導入したプロジェクトを作成しました。両方を同じswiftファイルにインポートしてそれらの拡張機能にアクセスすると、呼び出しを指定しても、「someProperty/someClassMethod()のあいまいな使用」エラーが発生しましたSwiftKit.UIView.someClassMethod() の形式:
それらの1つだけをインポートすると、あいまいなエラーはなくなりますが、さらに奇妙なことが起こります:
コンソールの出力:
Swift Foundation の someProperty
Swift Foundation の someClassMethod
私の質問は次のとおりです:これらの拡張機能(クラス/インスタンスメソッド、プロパティの両方)をあいまいにせずに呼び出すにはどうすればよいですか? できない場合は、Objective-C で通常行うように、拡張機能名にプレフィックスを追加する必要があるということですか?
swift - キーと値の制約による辞書の拡張
辞書を拡張し、型の値を持つ NSDate の特定のキー型に制約したいArray<MyClass>
MyClass は、サブクラスのない迅速なクラスです。
上記のコードはビルド エラーを返します。
非プロトコル型「配列」に制限された型「値」
わかりましたので、特定のプロトコルに制約する必要があるようですが、奇妙なことに、値を次のように制約すると十分です。
拡張ディクショナリ、キー: NSDate、値: MyClass
コンパイラは文句を言わず、ビルドは成功します。しかし MyClass はプロトコルではありません。それで、何が得られますか?
私はそれを次のように制限することができました:
ただし、count プロパティを整数形式で取得する必要があるため、これには強制キャストが必要です。
では、 [MyClass] の値の型に明示的に制約できないのはなぜですか?
swift - Swift が拡張機能に保存されたプロパティを許可しないのはなぜですか?
私は拡張機能に格納されたプロパティを実装する最良の方法を見つけようとしてきましたが、この質問に出くわしました: Swift 拡張機能の格納されたプロパティの代替。しかし、議論や他の場所で理由を見つけられませんでした。保存されたプロパティが Swift で許可されない理由はありますか? もしそうなら、その理由は何ですか?
swift - Swift プロトコル拡張の「関連付けられた型」を理解するのが難しい
プロトコルとプロトコル拡張を迅速に理解するのに苦労しています。
クラスに適用できる一連のプロトコルと、デフォルトの実装を提供する一連のプロトコル拡張を定義したいと考えています。コード例:
rawValue()
拡張機能の上記のオーバーライド関数はエラーを返しますAmbiguous type name 'ResultType' in 'Self'
。Self
からを削除するとSelf.ResultType
、エラーが発生します'ResultType' is ambiguous for type lookup in this context
。
どのタイプを使用するかをプロトコル拡張に通知するにはどうすればよいResultType
ですか?
私の目的は、次のようにプロトコルとその拡張機能をクラスに適用できるようにすることです。
となることによって:
デフォルトの実装を提供するためにプロトコル拡張がどのように機能するかについて、私が完全にベースから外れている場合、私は同じ結果を達成する方法についてオープンなアイデアを持っています。