美文网首页
窥探Swift之数组安全索引与数组切片

窥探Swift之数组安全索引与数组切片

作者: nuannuan_nuan | 来源:发表于2019-03-26 17:44 被阅读0次

    本文摘自窥探Swift之数组安全索引与数组切片

    前言:
    通常我们对数组进行索引操作会考虑是否越界,通常的处理方法是对Array添加extention,然后做安全扩展。

    // MARK: - 数组
    extension Array {
        //数组安全索引
        subscript (safe index: Int) -> Element? {
            return (0..<count).contains(index) ? self[index] : nil
        }
    }
    

    另外如果我们想对数组进行多个索引操作可以这样做:

     //多索引操作
        subscript(i1: Int, i2: Int, rest: Int...) -> [Element] {
            get {
                var result: [Element] = [self[i1], self[i2]]
                for index in rest {
                    result.append(self[index])
                }
                return result
            }
            
            set (values) {
                for (index, value) in zip([i1, i2] + rest, values) {
                    self[index] = value
                }
            }
        }
    

    接下来我们讲一下数组切片,这是swift引入的新概念

            var testArray = [10,20,30,40,50,60]
            var arraySlices = testArray[2...4]
    

    数组切片需要注意的是:

    • 1:数组切片的下标与原始数组中的下标保持一致。我们对arraySlices的访问仅限在2..4,arraySlices[0]会报错
    • 2: 尽管切片与原数组有着对应的数组下标,但是切片是原始数组的部分拷贝,所以修改切片或者修改原数组,两者互不影响
    • 3: 切片转换成枚举,那么切片中与原始数组对应的下标关系将不存在。见下面代码
    let enumerate = arraySlices.enumerated()
            dump(enumerate)
            for a in enumerate {
                print("a=\(a),a.0=\(a.0),a.1=\(a.1)")
            }
    

    相关文章

      网友评论

          本文标题:窥探Swift之数组安全索引与数组切片

          本文链接:https://www.haomeiwen.com/subject/desnvqtx.html