每天学一点Swift----面向对象上(九)

十一.下标

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关键字和或括号。

你可能感兴趣的:(每天学一点Swift----面向对象上(九))