获取数组中项目索引的最有效方法是什么?在Objective-C中,我们曾经能够做到:如何获取数组中的项目的索引?
[arrayName indexOfObject:myObject]
在Swift中,我知道我们可以做到以下几点。
index =arrayName.indexOf({$0 === myObject})
这是最干净和最有效的方法吗?
获取数组中项目索引的最有效方法是什么?在Objective-C中,我们曾经能够做到:如何获取数组中的项目的索引?
[arrayName indexOfObject:myObject]
在Swift中,我知道我们可以做到以下几点。
index =arrayName.indexOf({$0 === myObject})
这是最干净和最有效的方法吗?
由于奥利弗指出,你可以使用
let index = array.indexOf(myObject)
但是,这只会工作,如果你的对象符合Equatable
协议,以符合它,你必须实现==
功能,像这样:
class MyClass {
}
extension MyClass: Equatable { }
func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return lhs === rhs // === returns true when both references point to the same object
}
如果你的类从NSObject
继承和你比较,不仅仅是比较指针以外的东西,你必须覆盖isEqual:
以及
override func isEqual(object: AnyObject?) -> Bool {
guard let obj = object as? MyClass else { return false }
return self == obj
}
没有必要重写isEqual,每个NSObject都有自己的基本实现来检查指针是否相等,只有当你需要匹配与指针的值不同的东西 – Andrea
@Andrea你是对的,我更新了我的答案反映了这一点。 – EmilioPelaez
现在,这个问题主要是基于观点的。请详细说明“最干净和最高效”的含义。 – JAL