Отрицательные показатели в массивах Swift - PullRequest
0 голосов
/ 04 октября 2019

Возможно ли и просто, чтобы первый индекс в массиве начинался с отрицательного числа вместо 0?

Если так, как бы я определил следующее, чтобы они начинались с -1 вместо 0? И как мне получить доступ к значению?

var myIntArray:[Int] = [4, 2, 1]
var myDoubleArray:[Double] = [28, 28, 14]
var myCGFloatArray:[CGFloat] = [0.14, 0.14, 0.1]

1 Ответ

2 голосов
/ 04 октября 2019

Для этого можно указать собственный индекс:

extension Array {
    private var customIndexOffset: Int { return -1 }

    subscript(customIndex index: Int) -> Element {
        get {
            return self[index - customIndexOffset]
        }
        set {
            self[index - customIndexOffset] = newValue
        }
    }
}

Сейчас myIntArray[customIndex: -1] == myIntArray[0]

- Более общий, более широкий охват:

extension MutableCollection where Index == Int {
    private var customIndexOffset: Int { -2 }

    subscript(customIndex index: Int) -> Element {
        get { self[index - customIndexOffset] }
        set { self[index - customIndexOffset] = newValue }
    }
}


extension Collection where Index == Int {
    private var customIndexOffset: Int { -2 }

    subscript(customIndex index: Int) -> Element { self[index - customIndexOffset] }
}
...