2016-04-15 55 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

相关问题