本节书摘来自异步社区《swift开发实战》一书中的第16章,第16.1节下标脚本语法,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看
第16章 下标脚本
swift开发实战
在swift语言中,类(class)、结构体(structure)和枚举(enumeration)等目标中定义下标脚本,被认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。在本章的内容中,将详细讲解swift下标脚本的基本知识。
16.1 下标脚本语法
在swift语言中,可以使用下标脚本访问一个数组(array)实例中的元素,参见如下所示的格式。
在访问字典(dictionary)实例中的元素时,可以通过如下所示的代码实现。
在swift语言中,对于同一个目标可以定义多个下标脚本,通过索引值类型的不同进行重载,而且索引值的个数可以是多个。
在swift程序中使用下标脚本,通过在实例后面的方括号中传入一个或者多个索引值来对实例进行访问和赋值,其语法类似于实例方法和计算型属性的混合。与定义实例方法类似,使用关键字subscript定义下标脚本,显式地声明入参(一个或多个)和返回类型。与实例方法不同的是,下标脚本可以设定为读写或只读,这种方式和计算型属性的getter和setter类似。参见如下所示的演示代码。
在上述代码中,newvalue的类型必须和下标脚本定义的返回类型相同。与计算型属性相同的是,即使不写set的入参声明newvalue,依然可以在set代码块中使用默认的变量newvalue来访问新赋的值。
在swift语言中,与只读计算型属性一样,可以直接将本应该写在get代码块中的代码写在subscript中。参见如下所示的演示代码。
例如在如下所示的代码中,演示了在timestable结构体中使用只读下标脚本的用法,该结构体用来展示传入整数的n倍。

实例文件main.swift的具体实现代码如下所示。
在上述代码中,通过timestable结构体创建了一个用来表示索引值3倍的实例,数值3作为结构体构造函数入参初始化实例成员multiplier。此时可以通过下标脚本来得到结果,比如threetimestable[6]。上述语句访问了threetimestable的第六个元素,返回6的3倍即18。
本实例执行后的效果如图16-1所示。
上述timestable例子是基于一个固定的数学公式,这并不适合开放写权限来对threetimestable [someindex]进行赋值操作,这也是为什么附属脚本只定义为只读的原因。