类、结构体和枚举都可以定义下标,一种访问集合(collection)、列表(list)和序列(sequence)的快捷方式。和OC类似。
一个类型可以定义多个下标,通过不同的索引值重载。并且下标不仅限于一维的,也可以根据需求定义多个参数的下标。
下标语法(Subscript Syntax)
下标允许通过在实例名称后的方括号中传入一个或者多个索引值来对实例进行存取。有点类似实例方法的语法和计算型属性语法的混合。定义下标使用 subscript 关键字,指定一个或多个输入参数和返回值,与实例方法不同,下标可以设定为读写或只读(有点类似计算属性):
一般语法 🌰 再举个🌰
下标用法(Subscript Usage)
下标的用法要根据具体的情况来定,不过通常都是作为访问集合、列表和序列中元素的快捷方式。当然,也可以通过上面的语法来自由的来实现下标:
var numberOfLegs = ["spider": 8, "ant": 6, "dog": 4]
numberOfLegs["bird"] = 2
注意
Swift的字典类型的下标接受并返回可选类型的值。之所以这样是因为不是每个键都有值相对应,同时,这也提供了一种可以通过键来删除对应值的方式,就是将键所对应的自己设为 nil 即可。
下标选项(Subscript Options)
下标可以接受任意数量的输入参数,并且接受任何类型的参数,也可以返回任何类型。下标可以使用可变参数,但是不能用 in-out 参数或者提供默认值。
如果需要,类或者结构体可以提供多个下标实现。根据值的类型或在下标被使用时的方括号中的值进行推断,匹配合适的下标。(这句话太长了,下面给原句)这就是下标重载。
A class or structure can provide as many subscript implementations as it needs, and the appropriate subscript to be used will be inferred based on the types of the value or values that are contained within the subscript brackets at the point that the subscript is used.
虽然常用的方法是传入单一的下标,但是还是可以根据具体的情况传入多个下标:
Subscript Options 🌰
网友评论