2017-10-16 2 views
0

유형이 tuple (Date, MyOwnClass) 인 배열을 가지고 있고 튜플 배열에서 내 대상 튜플과 동일한 특정 튜플의 인덱스를 찾으려고합니다. Xcode는 ".indexOf ({$ 0 == targetTuple}")를 사용하려고하면 "Binary operator == can not ..."이라고 말하면서 오류가 발생합니다. "(Swift) 튜플 배열 [(Date, MyClass)]에서 튜플 요소 (Date, MyClass)의 인덱스를 가져 오는 방법은 무엇입니까?

미리 감사드립니다!

+0

는 [mcve] –

답변

0

모든 요소 또한 준수 경우에 당신이 당신의 클래스가 Equatable 프로토콜을 구현하고 있는지 확인해야하므로 튜플 자동 Equatable 프로토콜을 준수 :

class MyClass { 
    var name : String 
    init(_ _name : String) { 
    name = _name 
    } 
} 

extension MyClass: Equatable { 
    public static func ==(lhs: MyClass, rhs: MyClass) -> Bool { 
    return lhs.name == rhs.name 
    } 
} 

let ar : [(Int, MyClass)] = [ 
    (1, MyClass("A")), 
    (2, MyClass("B")), 
    (1, MyClass("A")) 
] 

if let ix = ar.index(where:{$0 == (1, MyClass("A"))}) { 
    print(ix) 
} else { 
    print("not found") 
} 

// 0 is printed 
+0

마이너 보정을 제공하세요 :이 은 equatable 요소의 튜플에 대해서는'=='연산자지만, 튜플은 'Equatable' 프로토콜을 따르지 않습니다. –

+0

답변 해 주셔서 대단히 감사합니다. 프로토콜 인 Equatable은 새로운 것이므로, 언제 사용해야하는지, 왜 튜플을 필요로하는지에 대한 질문이 있습니다. 감사!! –

관련 문제