![](https://img.haomeiwen.com/i1599230/0c97e00185ea81fb.jpeg)
附属脚本可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。
附属脚本本质上是Swift提供的一组开放的自定义接口, 能让你快速访问需要访问的值, 一般情况下附属脚本只是用读取属性, 而不使用写入属性.
//定义附属脚本使用subscript关键字,显式声明入参(一个或多个)和返回类型。
//与实例方法不同的是附属脚本可以设定为读写或只读
subscript(index: Int) -> Int {
get {
// 返回与入参匹配的Int类型的值
}
set(newValue) {
// 执行赋值操作
}
}
newValue的类型必须和附属脚本定义的返回类型相同。与计算型属性相同的是set的入参声明newValue就算不写,在set代码块中依然可以使用默认的newValue这个变量来访问新赋的值。
与只读计算型属性一样,可以直接将原本应该写在get代码块中的代码写在subscript中, 这样就定义了一个只有读取功能的附属脚本
//只有读取功能的附属脚本
subscript(index: Int) -> Int {
// 返回与入参匹配的Int类型的值
}
下面代码演示了一个在TimesTable结构体中使用只读附属脚本的用法,该结构体用来展示传入整数的n倍。
struct TimesTable {
let multiplier: Int
//附属脚本, 本质上就是一个特殊的读写
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("3的6倍是\(threeTimesTable[6])")
// 输出 "3的6倍是18"
网友评论