問題タブ [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.

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

ios - Any として定義されているが、同じ型であることが保証されている値の配列格納をテストします。

私のこの質問(および受け入れられた回答)に基づいて、配列内の値の包含をテストしたいと思います。

値はタイプ として定義された変数に格納されAny、配列は として定義され[Any]ます。

変数に格納される値と配列の要素の実際の型は実行時に決定されますが、次の条件を満たすことが保証されています。

  1. 両方の型 (変数要素と配列要素) が一致し、かつ
  2. StringIntまたはのいずれかBoolです。

これまでのところ、次のコードが機能しています。

ただし、多くのロジックの重複があり、おそらく次のように、よりスマートにできたらいいのにと思います。

...しかし、プロトコルの使用に関する制限がEquatable邪魔をしています。何かアドバイス?

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

swift - Swift - 等値変数を持つ構造体

Equatable であり、Equatable であるかどうかに関係なく AnyObject 型の変数 (この例では「variable2」) を持つ構造体を実装しようとしています。

最初は variable2 がプロトコル Equatable に準拠しているかどうかを確認しようとしていましたが、そうするとコンパイル エラーが発生します。

別のアプローチで ' variable2'を変更しようとしましEquatableたが、それでも一般的な制約としてのみ使用できるというエラーが表示されます。

私はいくつかの異なる方法を試しましたが、うまく機能させることができませんでした。誰かがこれに対する解決策を持っていますか?最初のケースを解決するのが最善の状況ですが、2番目のケースも私のニーズを満たすかもしれません.

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

swift - 二項演算子 '==' は 2 つのオペランドに適用できません

私はプロトコルを持つクラスを持っていますEquatable。クラスは次のようになります。

しかし、これは私にエラーを与えています(タイトルを参照)。プロパティitem[[String: String]]以前のもので、問題はありませんでした。これを修正する方法がわかりません。SO全体をグーグルで検索してみましたが、運がありません..

列挙型は単純な基本的なものです。

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

swift - Swift で列挙型を比較す​​る

次のような2つの列挙型を含むクラスがあります(単純化):

ここで、UserError または BackendError のいずれかを受け入れ、入力に応じて String を返す汎用関数を作成したいと思います。このようなもの:

私の最初のアプローチはジェネリックを使用することでした - しかし、率直に言って、私はこの概念を理解するのに苦労しており、ここで根本的に間違っている傾向があります. 私がしたことは:

明らかに、これは機能しません。

これは、欠落している Equatable/Comparable プロトコルの実装と、ジェネリックの使用に関する私の一般的な理解不足と関係があることを理解しています。私の質問は次のとおりです。

  1. 一般的な「型」パラメーターを列挙型と比較するにはどうすればよいですか?

  2. ジェネリックに対する私の理解は完全に間違っていますか?

AnyObjectまた、アプローチを避けたいと思います。

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

ios - プロトコル演算子をグローバル関数として実装する必要があるのはなぜですか?

グローバル スコープでメソッドを宣言する方法について言及しているこのSwift Equatable Protocolの質問に対する回答を見てきました。==

を採用しない場合でも、2 つの型が等しいかどうかをテストするようにEquatable宣言できます。==

その実装をグローバル スコープで宣言する必要があるという事実は、たとえ採用されたとしても、それがプロトコルに付随しており、プロトコルとは異なるように思わせます。Equatable

プロトコルは、Equatable型がプロトコルの必要なメソッドを実装したことを (私たちと) コンパイラに安全に知らせるだけの構文糖衣以上のものであるでしょうか?

プロトコルであっても、オペレーターの実装をグローバルに宣言する必要があるのはなぜですか? これは、オペレーターの派遣方法が異なるためですか?

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

swift - CollectionType を拡張するときに、Swift が "==" 演算子のオーバーロードを呼び出さない

から継承するカスタム クラス (VotingOption) がNSManagedObjectあり、配列内のいくつかの投票オプションが重複しているかどうかを確認したい場合があります。コードをできるだけ一般的にしようとしています。これは CollectionType プロトコルを拡張するために私がしたことです:

これは、グローバル関数を使用していないことを除いて、魅力的に機能しています。

私がこのようなことをするとき:

次のように VotingOption で isEqual を拡張すると:

アプリがクラッシュし、「libc++abi.dylib: 種類 NSException のキャッチされない例外で終了しています」というエラーで AppDelegate を指しています。

CollectionType の "==" に VotingOption のグローバル関数を使用するように指示するにはどうすればよいですか?

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

swift - Equatableプロトコルに準拠していないSwift 2汎用データ構造

私は Node と呼ばれる Swift で柔軟なデータ構造を構築することに取り組んでおり、それ自体はどのタイプのコンテンツにも結び付けられていません。ただし、ノード内のペイロード データは、Equatable プロトコルに準拠する次の汎用 Element 構造体として宣言されます。

制約は、Element が同等のクラス タイプに関連付けられている必要があることです。私が抱えている問題は、この要素を含むノードにあります。ノードは、ディクショナリ、配列、またはその他のコンテナ タイプで使用されます。ここに私が持っているものがあります:

もちろん、AnyObject が Equatable に準拠していないというエラーが表示されます。ペイロードの宣言を等価なオブジェクトのみに制限する方法はありますか? この時点では、ペイロードに格納される可能性があるオブジェクトの種類はわかりません。

また、Node の == 関数にクラス チェックを配置して、2 つの Node ペイロードが互換性があることを確認して比較する必要があることに気付きました。

考え?ありがとうございました!

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

swift - NSCoding および NSObject をサブクラス化するカスタム クラスに対して呼び出されない Equatable 型のオーバーライドされた == 関数

以下のクラスは、型の関数FooBarをオーバーライドする必要があります。==Equatable

ただし、オブジェクトcontainsの配列を呼び出しても、カスタム関数FooBar内のブレークポイントは呼び出されません。別の関数がこのカスタム関数をオーバーライド==している可能性はありますか?==

注: FooBar は NSCoding および NSObject からサブクラス化する必要があるため、次のエラーが発生するため、FooBar は Equatable をプロトコルとしてリストしません。

「FooBar」のプロトコル「Equatable」への冗長な準拠

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

swift - RealmObject Equatable 冗長メッセージ

Personrealms から固有の単純なクラスがありObjectます。次に、そのサブクラスをEquatableプロトコルに準拠させます。非常に単純なコードは次のようになります。

レルム バージョン 0.98.8 から始めて、すべてがアスペクトどおりに機能しました。バージョン 0.102.0 (およびその間の他のバージョン) に更新すると、コンパイラ エラー メッセージが表示されます。

バージョン 0.98.8 にダウングレードしても、エラーは依然として残ります。もう 1 つの奇妙な動作は、開発者のマシンの 1 つで、同じコードが正常にコンパイルされることです。

いくつかの調査の結果、何が起こっているのか、これを修正または回避する方法はわかりません。