Swift开篇010->下标

原创 2016年06月01日 17:08:08

PART_ONLY 下标(subscript)

  1. 简介

    • 下标可定义在类、结构体、枚举中,是访问集合、列表、序列元素的快捷方式
  2. 语法格式

    • 下标了设定为读写或只读

      // 读写
      subscript(index: Int) -> Int {
          get {
            // 返回一个适当的 Int 类型的值
          }
      
          // newValue 类型与下标返回类型相同
          set(newValue) {
            // 执行适当的赋值操作
          }
      }
      // 只读
      subscript(index: Int) -> Int {
          // 返回一个适当的 Int 类型的值
      }
  3. 演示

    struct TimesTable {
        let multiplier: Int
    
        // 只读的下标
        subscript(index: Int) -> Int {
            return multiplier * index
        }
    }
    
    let threeTimesTable = TimesTable(multiplier: 3)
    // threeTimesTable[6] 的值为 18
  4. 下标用法举例(Dictionary)

    • 本例通过下标返回将可选类型(Int?)

    • 通过下标删除键对应的值:将键对应的值赋值为 nil 即可

      var animals = ["spider": 8, "ant": 6, "cat": 4]
      // 通过下标插入新的键值对
      animals["bird"] = 2
  5. 下标选项

    • 下标可接受任意数量、类型的入参,下标的返回值也可是任意类型

    • 下标可使用变量入参和可变参数,但不能用输入输出参数,也不能给参数设置默认值

    • 类或结构体可提供多个下标实现,使用时通过入参的数量和类型自动匹配

    • 下为矩形结构体的案例

      struct Matrix {
          // 行列
          let rows: Int, columns: Int
          // 根据行列,得到数组值
          var grid: [Double]
      
          init(rows: Int, columns: Int) {
              self.rows = rows
              self.columns = columns
      
              grid = Array(count: rows * columns, repeatedValue: 0.0)
          }
      
          // 角标越界判断
          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, column: column), "Index out of range")
                  return grid[(row * columns) + column]
              }
              set {
                  assert(indexIsValidForRow(row, column: column), "Index out of range")
                  grid[(row * columns) + column] = newValue
              }
          }
      }
      
      // 构造 2*2 的矩阵实例
      var matrix = Matrix(rows: 2, columns: 2)
      
      matrix[0, 1] = 1.5 // 赋值
      matrix[1, 0] = 3.2 // 赋值
      
      let someValue = matrix[2, 2]
      // 越界:断言触发

以上。如有错误和疑问,欢迎指正提出。 catface.wyh@gmail.com

版权声明:本文为博主原创文章,如需转载请声明作者信息,谢谢。

关于NSA的EternalBlue(永恒之蓝) ms17-010漏洞利用

NSA的EternalBlue(永恒之蓝) ms17-010 漏洞利用
  • cnbluerain
  • cnbluerain
  • 2017年05月19日 01:25
  • 6703

MS17-010移植到MSF中进行入侵

勒索病毒爆发后,这个0day相继被各种利用,现在正在走向灭亡,趁现在大部分内网用户还没有重视该漏洞,于是我想在前人的教程基础上,发一篇自己总结出来的教程,让更多的人可以少走一点弯路。   图1-1. ...
  • Sufeiboy
  • Sufeiboy
  • 2017年05月17日 21:22
  • 5311

【漏洞分析】MS17-010:深入分析“永恒之蓝”漏洞

背景 从EternalBlue这个Exploit被影子经纪人公布到互联网上后,就成为了“明星”。在过去的五月中,这个Exploit被多款恶意软件利用。包括肆虐的WannaCryp0t,无文件...
  • qq_27446553
  • qq_27446553
  • 2017年06月20日 10:09
  • 1430

swift详解之八---------------下标脚本

swift详解之八—————下标脚本下标脚本 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用...
  • u010586842
  • u010586842
  • 2015年08月23日 19:01
  • 1203

Swift回忆录下标——subscript

Swift回忆录下标——subscript定义下标可以定义在类、结构体和枚举中,是访问集合,列表或序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。语法下标允许你通...
  • sdefzhpk
  • sdefzhpk
  • 2017年05月31日 11:40
  • 212

对照Java学习Swift--下标(Subscripts)

Java中限制了下标的操作,只有在数组中才能使用,非常简单,但是在Swift中,可以在类(class)、结构体(structure)和枚举(enumeration)中,是访问集合(collection...
  • lovexieyuan520
  • lovexieyuan520
  • 2016年05月05日 00:48
  • 956

swift 笔记 (十二) —— 下标

下标 swift允许我们为 类,结构体,枚举 定义下标,以更便捷的方式访问一大堆属性。比如Array和Dictionary都是结构体,swift的工程师已经为这两个类型提供好了下标操作的代码,所以,...
  • supergerm
  • supergerm
  • 2014年06月12日 01:18
  • 1448

22、swift开发iOS——下标脚本

Swift 下标脚本 下标脚本 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的...
  • notbaron
  • notbaron
  • 2017年03月12日 23:19
  • 29940

Swift3.0中文教程:12.下标

下标 (subscripts)可以定义在类(class)、结构体(structure)和枚举(enumeration)中,是访问集合(collection),列表(list)或序列(sequence)...
  • u012907783
  • u012907783
  • 2016年12月08日 18:15
  • 202

swift基础笔记6-方法&下标脚本

摘要:类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装 了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 Objecti ve-C 中的类方...
  • u013929312
  • u013929312
  • 2016年05月25日 14:48
  • 285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift开篇010->下标
举报原因:
原因补充:

(最多只允许输入30个字)