2017-01-28 6 views
0

私は、カスタム構造体を持っている...スウィフト3 - バイナリ演算子「==」は2つの「体mystruct」のオペランドに適用することはできません

struct MyStruct { 

    let viewController: UIViewController 
    let view:UIView 

    init(viewController:UIViewController) { 
     self.viewController = viewController 
    } 
} 

私はそれらの配列を持ち、その後、私はかどうかを確認したいですこの配列は、特定の構造体...

let aStruct = someStruct 
if structArray.filter { $0 == aStruct } { 
    print("do stuff") 
} 

が含まれていますが、私はエラーバイナリ演算子「==」はまず、なぜ私ができない... 2つの「体mystruct」オペランドに適用することはできません取得していますこの方法で構造体をフィルタリングしてください...次に、この方法で配列を検索する方法は...

おかげで、事前

+3

は、あなたが '' Equatable'プロトコルに準拠struct'持っています。 – rmaddy

+2

'MyStruct'を' Equatable'に準拠させても、if structArray.filter {$ 0 == aStruct} {...} 'と言うことはできません。代わりに' contains(_ :) 'を使用してください。 – Hamish

答えて

2

にあなたはそれが「等しい」とみなされるかを決定できるようにするためにEquatableプロトコルに準拠する構造体を必要としています。あなたは、彼らが同じviewController性質を持っている場合、あなたはこのような何かを行うことができ、それらが等しいと仮定すると、考える

extension MyStruct: Equatable{} 

func ==(lhs: MyStruct, rhs: MyStruct) -> Bool { 
    return lhs.viewController == rhs.viewController; 
} 
関連する問題