Подтвердить что ты не робот

Замена массива indexOf (_:) в Swift 3

В моем проекте (написанном в Swift 3) я хочу получить индекс элемента из массива с использованием метода indexOf(_:) (существует в Swift 2.2), но я не могу найти замену для него.

Есть ли хорошая замена для этого метода в Swift 3 или что-то подобное?

Обновление

Я забыл упомянуть, что хочу искать в пользовательском объекте. В завершении кода у меня нет никаких намеков при наборе 'indexof'. Но когда я пытаюсь получить индекс построения в типе типа Int, завершение кода работает, и я мог бы использовать метод index(of:).

4b9b3361

Ответ 1

indexOf(_:) был переименован в index(of:) для типов, соответствующих Equatable. Вы можете сопоставить любой из ваших типов с Equatable, это не только для встроенных типов:

struct Point: Equatable {
    var x, y: Int
}

func == (left: Point, right: Point) -> Bool {
    return left.x == right.x && left.y == right.y
}

let points = [Point(x: 3, y: 5), Point(x: 7, y: 2), Point(x: 10, y: -4)]
points.index(of: Point(x: 7, y: 2)) // 1

indexOf(_:), который принимает замыкание, был переименован в index(where:):

[1, 3, 5, 4, 2].index(where: { $0 > 3 }) // 2

// or with a training closure:
[1, 3, 5, 4, 2].index { $0 > 3 } // 2

Ответ 2

Не работал у меня в Swift 3 XCode 8, пока я не отдал свой класс расширение.

Например:

class MyClass {
    var key: String?
}

extension MyClass: Equatable {
    static func == (lhs: MyClass, rhs: MyClass) -> Bool {
        return MyClass.key == MyClass.key
    }
}

Ответ 3

Это работало для меня в Swift 3 без расширения:

struct MyClass: Equatable {
    let title: String

    public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
        return lhs.title == rhs.title
    }
}