语法
定义下标脚本使用subscript关键字,显式声明入参(一个或多个)和返回类型。
1 2 3 4 5 6 7 8 9
| subscript(index: Int) -> Int { get { } set(newValue) { } }
|
1 2 3
| subscript(index: Int) -> Int { return index*4 }
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import Cocoa
struct subexample { let decrementer: Int subscript(index: Int) -> Int { return decrementer / index } } let division = subexample(decrementer: 100)
print("100 除以 9 等于 \(division[9])") print("100 除以 2 等于 \(division[2])") print("100 除以 3 等于 \(division[3])") print("100 除以 5 等于 \(division[5])") print("100 除以 7 等于 \(division[7])")
|
实例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import Cocoa
class daysofaweek { private var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "saturday"] subscript(index: Int) -> String { get { return days[index] } set(newValue) { self.days[index] = newValue } } } var p = daysofaweek()
print(p[0]) print(p[1]) print(p[2]) print(p[3])
|
下标脚本选项
- 下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。
- 下标脚本的返回值也可以是任何类型。
- 下标脚本可以使用变量参数和可变参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import Cocoa
struct Matrix { let rows: Int, columns: Int var print: [Double] init(rows: Int, columns: Int) { self.rows = rows self.columns = columns print = Array(repeating: 0.0, count: rows * columns) } subscript(row: Int, column: Int) -> Double { get { return print[(row * columns) + column] } set { print[(row * columns) + column] = newValue } } }
var mat = Matrix(rows: 3, columns: 3)
mat[0,0] = 1.0 mat[0,1] = 2.0 mat[1,0] = 3.0 mat[1,1] = 5.0
print("\(mat[0,0])") print("\(mat[0,1])") print("\(mat[1,0])") print("\(mat[1,1])")
|