swift 学习- 13 -- 下标

// 下标 可以定义在 类, 结构体, 和 枚举 中, 是访问集合, 列表或 序列中元素的快捷方式, 可以使用下标的索引, 设置 和 获取值, 而不需要再调用对应的存取方法, 举例来说, 用下标访问一个 Array 实例值的元素可以写作 someArray[index], 访问 dictionary 实例中的元素可以写作 someDictionary[key]

// 一个类型 可以定义多个下标, 通过不同索引类型进行重载, 下标不限于一维, 你可以定义具有多个入参的下标满足自定义类型的需求

// 下标语法

// 下标允许你通过在实例名称后面的方括号中传入一个或者多个 索引值 对实例进行存取, 语法类似于实例方法语法 和 计算型语法的混合, 与定义实例方法类似, 定义下包使用 subscript 关键字, 指定一个 或 多个输入参数和返回类型, 与实例方法不同的是, 下标可以设定为 读写 或 只读, 这种行为由 getter 和 setter 实现, 有点类似于 计算属性

struct TimesTable{

let multiplier: Int

subscript (index: Int) -> Int{

return multiplier * index

}

}

let threeTimesTable = TimesTable(multiplier:3)

print("six times three is \(threeTimesTable[6])")

// 在上栗中, 创建了一个 TimesTable 实例, 用来表示整数 3 的 乘法表, 数值 3 被传递给结构体的构造函数, 作为实例成员 multiplier 的值

// 下标用法

// 下标的确切含义取决于使用场景, 下标经常作为访问集合, 列表 或 序列中元素的快捷方式, 你可以针对自己的特定的类 或者 结构体的 功能自由的以最恰当的方式 实现下标

// 例如: Swift 的 Dictionary 类型实现 下标用于对其实力中存储的值进行存取操作, 为字典取值时, 在下标中使用 和 字典的 键 类型相同 的值, 并把一个子弟那的值类型相同的值赋给这个下标

var numberofLegs = ["spider": 8,"ant": 6, "cat": 4]

numberofLegs["bird"] = 2

// 上例定义一个名为numberOfLegs的变量,并用一个包含三对键值的字典字面量初始化它。numberOfLegs字典的类型被推断为[String: Int]。字典创建完成后,该例子通过下标将String类型的键bird和Int类型的值2添加到字典中。

// 注意 : Swift 中的 dictionary 类型的下标接受并返回可选类型的值, 上栗中的 numberOflegs 字典通过下标返回的是一个 Int? 或者是 可选的 Int,做所以如此, 是因为不是每个键都有对应的值, 同时这也提供了一种通过键删除对应值的方式, 只需要将对应的值赋值 为 nil 即可

// 下标选项

// 下标可以接受任意数量的入参, 并且这些入参可以是任意类型, 下标的返回值也可以是任意类型, 下标可以使用变量参数和可变参数, 但不能使用输入输出参数, 也不能给参数设置默认值

// 一个类 或 结构体 可以根据自身需要提供多个下标实现, 使用下标时将通过入参的数量 和 类型进行区分, 自动匹配合适的下标, 这就是下标的重载