2016-04-15 85 views
2

獲取數組中項目索引的最有效方法是什麼?在Objective-C中,我們曾經能夠做到:如何獲取數組中的項目的索引?

[arrayName indexOfObject:myObject] 

在Swift中,我知道我們可以做到以下幾點。

index =arrayName.indexOf({$0 === myObject}) 

這是最乾淨和最有效的方法嗎?

+1

現在,這個問題主要是基於觀點的。請詳細說明「最乾淨和最高效」的含義。 – JAL

回答

11

由於奧利弗指出,你可以使用

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 
} 
+0

沒有必要重寫isEqual,每個NSObject都有自己的基本實現來檢查指針是否相等,只有當你需要匹配與指針的值不同的東西 – Andrea

+0

@Andrea你是對的,我更新了我的答案反映了這一點。 – EmilioPelaez

3

您可以使用:

let index = array.indexOf(myObject) 

你並不需要使用的封閉物的indexOf接受元素本身作爲參數

記住,指數是可選的,雖然

+0

並且myObject必須符合Equatable並且它將返回第一個匹配的索引 – Andrea

+0

是的,儘管使用的關閉ronaldoh1也需要這個。 –

+0

我不這麼認爲......羅納爾多使用===身份運算符只對引用類型有效,並檢查對象是否具有相同的引用 – Andrea

相關問題