美文网首页
Subscripts

Subscripts

作者: 夜雨聲煩_ | 来源:发表于2017-11-02 15:03 被阅读0次
    • 附属脚本可用于类、结构体和枚举。通过在[]内传入一个或多个参数,得到返回值。例如someArray[index]someDictionary[key]
    • 附属脚本的语法类似于计算属性和实例方法,使用subscript关键字。但是不同于实例方法,附属脚本可以是read-onlyread-write,必须同时包括setget
      如下:
      //[]中的传入参数为int类型,取到的返回值也是int类型
      subscript(index: Int) -> Int {
          get {
              // return an appropriate subscript value here
          }
          set(newValue) {
              // perform a suitable setting action here
          }
      }
      
    • 去掉getset实现read-only
      subscript(index: Int) -> Int {
          // return an appropriate subscript value here
      }
      
    • subscript的使用要在类型里,不能单独使用。使用方式如下
      struct TimesTable {
          let multiplier: Int
          subscript(index: Int) -> Int {
              return multiplier * index
          }
      }
      
      let threeTimesTable = TimesTable(multiplier: 3)
      print("six times three is \(threeTimesTable[6])")
      
    • 使用set和get和其他属性一样进行读写,都省略直接使用return时实现只读
    • 类型中可以定义参数不同的多个附属脚本,然后通过参数类型来判断执行哪个附属脚本,这就是脚本重载
    • 传入参数超范围会返回地址错误,类似数组越界
      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 indexIsValid(row: Int, column: Int) -> Bool {
              return row >= 0 && row < rows && column >= 0 && column < columns
          }
          subscript(row: Int, column: Int) -> Double {
              get {
                  assert(indexIsValid(row: row, column: column), "Index out of range")
                  return grid[(row * columns) + column]
              }
              set {
                  assert(indexIsValid(row: row, column: column), "Index out of range")
                  grid[(row * columns) + column] = newValue
              }
          }
      }
      

    相关文章

      网友评论

          本文标题:Subscripts

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