Subscripts
类、结构体、枚举能够通过下标来获取其中的值。
一下标语法
通过在一个方括号里写一个或者更多个值,下标可以查询实例对象。通过写 subscript 来定义一个下标,并且我们可以指定一个或者多个输入值和一个返回值。下标可以是 read-write 或者 read-only。
subscript(index: Int) -> Int {
get {
// return an appropriate subscript value here
}
set(newValue) {
// perform a suitable setting action here
}
}
newValue 的类型和返回值类型是相同。正如计算属性,你能选择不去指定 set 方法的参数,一个默认的返回值 newValue 被设置。
正如 read-only 计算属性,read-only 下标能够省略get 关键字
subscript(index: Int) -> Int {
// return an appropriate subscript value here
}
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// Prints "six times three is 18"
二.下标用法
下标的功能取决于具体类型对它的实现。下标一个典型的用法是用来快速的访问容器、列表。你能够为一些类或者结构体定义特殊的下边语法。
Swift 的 Dictionary 类型实现了下标语法,我们可以用下标来设置或者取回字典里的对象。
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
三可选下标
下标语法 neng 够接受任意类型和数量的输入参数。下标语法也可以返回任意类型。下标可以用可变参数,但是不能够用 in-out 参数或者提供默认的参数值。
类和结构体可以定义许多下边的实现。Swift 根据传入的参数来调用合适的下标实现。这就是下标的重载。
struct Point {
var x:Int
var y:Int
subscript(x:Int,y:Int)->Int{
get{
return self.x;
}
set{
self.x = newValue;
}
}
subscript(x:String,y:String)->Int{
return self.y;
}
}
var point = Point(x: 1, y: 2);
print("\(point[1,2])");
print("\(point["1","2"])")