問題タブ [equatable]
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 - ObjectIdentifier() と '===' 演算子の使用の違い
Swift でルート クラスを実装しているとします。これはEquatableプロトコルを採用していると宣言します (自分の型の配列に特定のインスタンスが含まれているかどうかを確認できるようにしたい)。
==この特定のケースでは、プロトコルの必須演算子を次のように実装することの違いは何ですか?
...これを行うのとは対照的に:
参考までに、ドキュメントには次のように書かれていObjectIdentifier()ます。
クラス インスタンスまたはメタタイプの一意の識別子。Swift では、クラス インスタンスとメタタイプのみが一意の ID を持ちます。構造体、列挙型、関数、またはタプルの同一性の概念はありません。
...そして、これはThe Swift Programming Language (Swift 3)の「Basic Operators」セクションがオペレーターについて述べていること===です:
ノート
Swift は 2 つの同一性演算子 (
===および!==) も提供します。これを使用して、2 つのオブジェクト参照が両方とも同じオブジェクト インスタンスを参照しているかどうかをテストします。詳細については、クラスと構造体を参照してください。
swift - クラス階層で Equatable プロトコルを適切に実装する方法は?
==Swift 3 の基本クラスとそのサブクラスに演算子 (from )を実装しようとしています。すべてのクラスは Swift でのみ使用されるため、プロトコルEquatableを関与させたくありません。NSObjectNSCopying
基本クラスとサブクラスから始めました。
Equatableここで、 と==演算子をに追加したいと思いましたBase。十分に単純に思えます。==ドキュメントからオペレーターの署名をコピーします。
ここまでは順調ですね。サブクラスの場合:
しかし、これはエラーになります:
演算子関数は「最終」演算子関数をオーバーライドします
わかった。いくつかの調査(まだSwift 3を学習中)の後、型メソッドをオーバーライドできることを示すために をstatic置き換えることができることを学びました。class
だから私は in に変更しようとしstaticます:classBase
しかし、それは新しいエラーになります:
非最終クラス「ベース」で宣言された演算子「==」は「最終」でなければなりません
うーん。これは、必要以上に複雑です。
基本クラスとサブクラスでEquatableプロトコルと演算子を適切に実装するにはどうすればよいですか?==
arrays - Swift 配列にオブジェクトのインスタンスが含まれているかどうかを確認します
Swift 配列にオブジェクトの特定のインスタンスが含まれているかどうかを確認するにはどうすればよいですか? 次の簡単な例を考えてみましょう。
Car調査の結果、クラスはEquatableプロトコルを採用しなければならないという結論に達しました。それは事実のようです:
その後myCars.contains(mazda)、実際に戻りtrueます。
ただし、の実装==は明らかに私が望んでいるものではありません。私が本当に返してほしいのは、次の質問への答えです:lhsとrhs同じCarインスタンスですか?
本当にそんなに複雑ですか?
ありがとう!
ios - Equatable == 関数が実装されていますが、それでもクラッシュします
私のアプリでは、関数を使用する必要があるため、プロトコルVideoを実装するクラスがあります。私のクラスは次のとおりでした:Equatable==(lhs:,rhs:) -> Bool
それは常に私にとってはうまくいきましたが、一部のユーザーは理由でクラッシュしましたprotocol witness for static Equatable.== infix(A, A) -> Bool in conformance Video。
だから私はこの機能を実装する別の方法を試しました
しかし、一部のユーザーでは依然としてクラッシュが発生し、その理由がわかりません...誰かがすでにこの問題を抱えているか、解決方法を知っていますか?
swift - 値が Equatable である一連の辞書の拡張
特定のキーを比較することにより、辞書の配列内の二重エントリを削除する次の方法を実装しようとしました。ただし、次のエラーのため、この拡張メソッドは機能しません。
二項演算子 == は 2 つの 'Equatable' オペランドに適用できません
これらは明らかに同等であり、同じ型 (Iterator.Element.Value) ですが、なぜ機能しないのでしょうか?
Equatable を制約ではなく特定の型として扱っていることがわかります。ジェネリック型または書き込みでは機能しませんでしたwhere Iterator.Element == [String: Any], Iterator.Element.Value: Equatable。
これを解決する方法についての手がかりはありますか?