Swift数组中的负索引

问题描述 投票:1回答:1

是否容易使数组中的第一个索引以负数而不是0开头?

如果是这样,我将如何定义以下内容,使它们以-1而不是0开头?以及如何获取值?

var myIntArray:[Int] = [4, 2, 1]
var myDoubleArray:[Double] = [28, 28, 14]
var myCGFloatArray:[CGFloat] = [0.14, 0.14, 0.1]
arrays swift indexing indices
1个回答
2
投票

您可以为此定义自定义下标:

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] }
}
© www.soinside.com 2019 - 2024. All rights reserved.