本文首发于个人博客
前言
Swift中对枚举、结构体、类使用下标(subscript),就可以像使用数组一样来使用了
使用规则
- 使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为:下标脚本
- subscript的语法类似于实例方法、计算属性,本质就是方法(函数)
例如下面的代码中,类Point
中,的属性 x 和 y,可以用下标访问
1 | class Point { |
访问的时候
1 | var p = Point() |
注意点
- subscript中定义的返回值类型决定了
- get方法的返回值类型
- set方法中newValue的类型
- subscript可以接受多个参数,并且类型任意
subscript可以没有set方法
例如下面的代码中,只提供了get,没有set
1 | class Point { |
- 如果只有get方法,可以省略get
上面的代码可以写成
1 | class Point { |
可以设置参数标签
例如下面的代码
1 | class Point { |
调用的时候
1 | var p = Point() |
下标可以是类型方法
如下
1 | class Sum { |
结构体、类作为返回值对比
结构体
eg,如下代码,结构体Point,用了下标subscript
只有get方法
1 | struct Point { |
使用的时候报错
1 | var pm = PointManager() |
解决办法一
- 加上set方法
1 | struct Point { |
解决办法二
结构体改成类
1 | class Point { |
原因分析
类是引用类型的,传递的是地址
结构体是值类型,传递的是具体的值
接受多个参数的下标
eg,如下代码
1 | class Grid { |
如下使用
1 | var grid = Grid() |
输出为
[[0, 77, 2], [3, 4, 88], [99, 7, 8]]
参考资料: