我有一个数组类型元组(Date,MyOwnClass),并尝试从元组数组中找到等于我的目标元组的特定元组的索引。当我尝试使用“.indexOf({$ 0 == targetTuple})”时,XCode给我错误说“二进制运算符==不能...”(Swift)如何从元组数组[[Date,MyClass]]中获取元组元素(Date,MyClass)的索引?
在此先感谢!
我有一个数组类型元组(Date,MyOwnClass),并尝试从元组数组中找到等于我的目标元组的特定元组的索引。当我尝试使用“.indexOf({$ 0 == targetTuple})”时,XCode给我错误说“二进制运算符==不能...”(Swift)如何从元组数组[[Date,MyClass]]中获取元组元素(Date,MyClass)的索引?
在此先感谢!
元组自动符合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
小幅调整:有是可等价元素的元组的'=='操作符,但元组不符合'Equatable'协议。 –
非常感谢您的回答。由于协议Equatable对我来说是一个新事物,所以我对何时使用它以及为什么需要它用于我的元组存在疑问。谢谢!! –
请提供[MCVE] –