Как определить оператор, принимающий параметр между двумя последовательностями символов? - PullRequest
0 голосов
/ 21 февраля 2019

Можно ли расширить массивы для использования другого индекса формы [[_ x: Int]], что на самом деле означает [x - 1]?Например, если вы получили доступ к массиву [[n]], вы бы получили доступ к n-му элементу массива.

1 Ответ

0 голосов
/ 21 февраля 2019

Ну, я бы просто создал subscript для Array с другой меткой аргумента

extension Array {

    subscript(nth nthIndex: Int) -> Element {
        get {
            return self[nthIndex - 1]
        }
        set(newValue) {
            self[nthIndex - 1] = newValue
        }
    }

}

Использование:

let array = ["first", "second", "third"]
print(array[nth: 1])

first


В качестве альтернативы вы можете использовать это решение для взлома, которое принимает массив Int в качестве параметра

extension Array {

    subscript(index: [Int]) -> Element {
        get {
            guard index.count == 1, let index = index.first else { fatalError("Fatal error: You have to pass exactly one index") }
            return self[index - 1]
        }
        set(newValue) {
            guard index.count == 1, let index = index.first else { fatalError("Fatal error: You have to pass exactly one index") }
            self[index - 1] = newValue
        }
    }

}

Использование:

let array = ["first", "second", "third"]
print(array[[1]])

first

...