swift-下标

  //下标
    
    //下标语法
    //下标允许你通过在实例名称后面的方括号中传入一个或者多个索引值来对实例进行存取。语法类似于实例方法语 法和计算型属性语法的混合。与定义实例方法类似,定义下标使用 subscript 关键字,指定一个或多个输入参数 和返回类型;与实例方法不同的是,下标可以设定为读写或只读。这种行为由 getter 和 setter 实现,有点类 似计算型属性:
    
//        subscript(index: NSInteger) -> NSInteger {
//        
//            get{
//            
//                //返回一个适当的nsinteger类型的值
//            }
//            set(newValue){
//                //执行适当的赋值操作
//            }
//        }
    
    
    //如同只读计算型属性,可以省略只读下标的 get 关键字:
//        subscript(index: Int) -> Int {
//            // 返回一个适当的 Int 类型的值
//        }
    
    struct TimesTable {
    
        let multiplier: NSInteger
        subscript(index: NSInteger) -> NSInteger {
        
            return multiplier * index
        }
    }
    let threeTimesTable = TimesTable(multiplier:3)
    print("six times three is \(threeTimesTable[6])")
    
    //下标用法
    var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
    numberOfLegs["bird"] = 2
    
    
    //下表选项
    struct Matrix {
        let rows: Int, columns: Int
        var grid: [Double]
        init(rows: Int, columns: Int) {
            self.rows = rows
            self.columns = columns
            grid = Array(repeating: 0.0, count: rows * columns)
        }
        func indexIsValidForRow(row: Int, column: Int) -> Bool {
            return row >= 0 && row < rows && column >= 0 && column < columns
        }
        subscript(row: Int, column: Int) -> Double {
            get {
                assert(indexIsValidForRow(row:row, column: column), "Index out of range")
                return grid[(row * columns) + column]
            }
            set {
                assert(indexIsValidForRow(row:row, column: column), "Index out of range")
                grid[(row * columns) + column] = newValue
            }
        }
    }
    
    
    var matrix = Matrix(rows: 2, columns: 2)
    
    print(matrix)

你可能感兴趣的:(swift-下标)