Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何获取数组中项目的索引?_Ios_Arrays_Swift - Fatal编程技术网

Ios 如何获取数组中项目的索引?

Ios 如何获取数组中项目的索引?,ios,arrays,swift,Ios,Arrays,Swift,获取数组中项的索引最有效的方法是什么?在Objective-C中,我们过去能够做到: [arrayName indexOfObject:myObject] 在斯威夫特,我知道我们可以做到以下几点 index =arrayName.indexOf({$0 === myObject}) 这是最干净、最有效的方法吗 您可以使用: let index = array.indexOf(myObject) 您不需要使用闭包,因为indexOf接受元素本身作为参数 请记住,索引是可选的,尽管正如Oliv

获取数组中项的索引最有效的方法是什么?在Objective-C中,我们过去能够做到:

[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你是对的,我更新了我的答案以反映这一点。