How to find index of list item in Swift?

后端 未结 22 1591
离开以前
离开以前 2020-11-22 06:17

I am trying to find an item index by searching a list. Does anybody know how to do that?

I see there is list.StartIndex and <

22条回答
  •  终归单人心
    2020-11-22 06:42

    tl;dr:

    For classes, you might be looking for:

    let index = someArray.firstIndex{$0 === someObject}
    

    Full answer:

    I think it's worth mentioning that with reference types (class) you might want to perform an identity comparison, in which case you just need to use the === identity operator in the predicate closure:


    Swift 5, Swift 4.2:

    let person1 = Person(name: "John")
    let person2 = Person(name: "Sue")
    let person3 = Person(name: "Maria")
    let person4 = Person(name: "Loner")
    
    let people = [person1, person2, person3]
    
    let indexOfPerson1 = people.firstIndex{$0 === person1} // 0
    let indexOfPerson2 = people.firstIndex{$0 === person2} // 1
    let indexOfPerson3 = people.firstIndex{$0 === person3} // 2
    let indexOfPerson4 = people.firstIndex{$0 === person4} // nil
    

    Note that the above syntax uses trailing closures syntax, and is equivalent to:

    let indexOfPerson1 = people.firstIndex(where: {$0 === person1})
    


    Swift 4 / Swift 3 - the function used to be called index

    Swift 2 - the function used to be called indexOf

    * Note the relevant and useful comment by paulbailey about class types that implement Equatable, where you need to consider whether you should be comparing using === (identity operator) or == (equality operator). If you decide to match using ==, then you can simply use the method suggested by others (people.firstIndex(of: person1)).

提交回复
热议问题