Ios 如何获取数组中项目的索引?
获取数组中项的索引最有效的方法是什么?在Objective-C中,我们过去能够做到:Ios 如何获取数组中项目的索引?,ios,arrays,swift,Ios,Arrays,Swift,获取数组中项的索引最有效的方法是什么?在Objective-C中,我们过去能够做到: [arrayName indexOfObject:myObject] 在斯威夫特,我知道我们可以做到以下几点 index =arrayName.indexOf({$0 === myObject}) 这是最干净、最有效的方法吗 您可以使用: let index = array.indexOf(myObject) 您不需要使用闭包,因为indexOf接受元素本身作为参数 请记住,索引是可选的,尽管正如Oliv
[arrayName indexOfObject:myObject]
在斯威夫特,我知道我们可以做到以下几点
index =arrayName.indexOf({$0 === myObject})
这是最干净、最有效的方法吗 您可以使用:
let index = array.indexOf(myObject)
您不需要使用闭包,因为indexOf接受元素本身作为参数
请记住,索引是可选的,尽管正如Oliver指出的,您可以使用
let index = array.indexOf(myObject)
但是,只有当您的对象符合equalable
协议时,这才有效。要符合协议,您必须实现=
功能,如下所示:
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
}
目前,这个问题主要是基于意见的。请详细说明你所说的“最干净、最高效”是什么意思。myObject必须符合Equatable,并且它将精确返回第一个匹配的索引是的,尽管ronaldoh1使用的闭包也要求这样。我不这么认为。。。Ronaldo使用了===标识运算符,该运算符仅对引用类型有效,并检查对象是否具有相同的引用是的,indexOf需要一个谓词来对其执行操作。(仍然有点困惑)啊,是的,你对===,是正确的,但是indexOf相当于NSArray的indexOfObject,如果你想在swift中为indexOfObjectIdenticalTo提供一些东西,恐怕你当前的解决方案很可能是不扩展CollectionTypes的最干净的方法,没有必要覆盖isEqual,每个NSObject都有自己的基本实现,用于检查指针是否相等,只有在需要匹配与pointers@Andrea你是对的,我更新了我的答案以反映这一点。