查找对象数组的索引

mak*_*kii 6 arrays ios swift

我无法弄清楚如何在数组中找到对象的索引.例如,我有这个数据结构:

class Person {
var name: String
var age: Int

init(name personName: String, age personAge: Int) {
    self.name = personName
    self.age = personAge
  }
}

let person1 = Person(name: "person1", age: 34)
let person2 = Person(name: "person2", age: 30)
...
var personsArray = [person1, person2, ...]
Run Code Online (Sandbox Code Playgroud)

我尝试使用,personsArray.index(where: ....)但我不明白如何使用它.index(of: ...)不起作用.我认为因为personsArray不符合Equatable协议......

Mik*_*ash 16

index(of: )
Run Code Online (Sandbox Code Playgroud)

在你的情况下获取Person - 它是通用函数.

index(where: ) 
Run Code Online (Sandbox Code Playgroud)

获取您想要找到特定人员的条件

你能做什么:

personsArray.index(where: { $0.name == "person1" })
Run Code Online (Sandbox Code Playgroud)

或者您可以将对象发送到:

personsArray.index(of: existingPerson)
Run Code Online (Sandbox Code Playgroud)

对于这两个选项,你可以得到零 - 你必须检查它是否为零(或保护它).


Ole*_*huk 5

从我的角度来看,只是比较一下===

小例子。

func getPersonIndex(from: [Person], user: Person) -> Int? {
    return from.index(where: { $0 === user })
}

getPersonIndex(from: personsArray, user: person2)
Run Code Online (Sandbox Code Playgroud)