十一.下标
1. 访问数组、字典时的方式就是下标的用法。
2. 所有的Swift类型(包括枚举、结构体、类)都支持定义下标。下标可以作为访问对象、集合或序列的简化方式。
3. 同一个类型可以定义多个下标,Swift允许通过下标的形参列表或返回值类型不同重载下标。
4. Swift中使用subscript关键字来定义下标,定义下标的语法为:
subscript(形参列表) ->下标返回值类型
{
get{
//getter部分的执行体,该部分必须要有返回值
}
[set(形参名)
{
//setter部分的执行体,该部分一个不能有返回值
}]
}
5. 说明:下标的形参列表与函数的形参列表的用法基本相同,只是下标的形参列表 ***不支持*** 指定外部参数,也不支持指定默认值。
6. 程序对下标赋值时,Swift就转为调用对应的setter方法,至于在setter方法中做什么操作,Swift并不关心;程序访问下标时,Swift就调用对应的getter方法,至于getter方法中做了什么操作,Swift也并不关心,只要getter方法返回一个与类型相同的值即可。
7. 举个栗子:
struct FkRect
{
var x : Int
var y : Int
var width : Int
var height : Int
//定义下标,指定下标只接受一个Int类型的参数,下标的返回值类型为Int
subscript(idx : Int) -> Int
{
get{
switch(idx)
{
case 0:
return self.x
case 1:
return self.y
case 2:
return self.width
case 3:
return self.height
default:
break;
}
}
//定义setter方法
set{ //这里省略了setter部分的形参名,直接使用了swift提供的隐式形参名newValue
switch(idx)
{
case 0:
self.x = newValue
case 1:
self.y = newValue
case 2:
self.width = newValue
case 3:
self.height = newValue
default:
break;
}
}
}
}
//创建FkRect实例
var rect = FkRect(x:20, y:30, width:200, height:400)
//通过下标对rect的属性赋值
rect[0] = 40
rect[2] = 500
//通过下标访问呢rect的属性
print("rect矩形的左上角X坐标为:\(rect[0]),宽度为: \(rect[2])")
8. 如果希望定义只读下标,则可以省略set部分。省略set部分之后,还可以省略get关键字和或括号。