2017-10-16 90 views

回答

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'协议。 –

+0

非常感谢您的回答。由于协议Equatable对我来说是一个新事物,所以我对何时使用它以及为什么需要它用于我的元组存在疑问。谢谢!! –