獲取數組中項目索引的最有效方法是什麼?在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