0
[T?]
(オプションの配列)の型の値を作成するコードをユニットテストする必要があります。しかし==
はoptionalsの配列のために定義されていません。Arrayを拡張して、オプション配列の等価性検査が可能になる方法はありますか?
Binary Operator '==' cannot be applied to two '[String?]' operands
は、だから私は(this answer以下)に応じてArray
を拡張:
extension Array {
static func ==<T: Equatable>(lhs: [T?], rhs: [T?]) -> Bool {
if lhs.count != rhs.count {
return false
}
else {
return zip(lhs,rhs).reduce(true) { $0 && ($1.0 == $1.1) }
}
}
}
しかし、今私が手:組み合わせで
Ambiguous reference to member '=='
を、メッセージは意味をなさないと思われます。どのように私はフィッティングの方法/関数から2つ以上に行くことができますか?
Array
をオプションの配列の等価性をチェックするためにどのように拡張できますか?
'for'ループはまったく気にしません。残りの部分は、私がやったこととどのように違うのですか?なぜそれが違いますか? – Raphael
関数のジェネリックパラメータと 'Array'構造体のジェネリックパラメータを混同していたためです。あなたの関数には 'T'という総称パラメータがあります。 'Array'は' Element'と呼ばれる一般的なパラメータを持っています。これら2つは混在しません。 –
明らかにそうです...私はまだ完全になぜ理解していません。なぜこの型のパラメータが 'Element'かどうかは重要ですか?バインダーはタイプを正しく一致させませんか?直感的に言えば、それは私の定義を一致するものとして見つけなければなりません。ハァッ。 (私は、Xcodeを信用してはいけないということに注意してください。ここで、 'Array'はジェネリックであるとか、型パラメータの名前が何であったかは分かりません。 ...) – Raphael