下标是一种特殊属性。子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器。
下面看一个示例:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
classDoubleDimensionalArray {
let rows: Int, columns: Int
var grid: [Int]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(count: rows * columns,repeatedValue:
0
)
}
subscript(row: Int, col: Int) -> Int {
//定义下标
get {
return
grid[(row * columns) + col]
}
set {
grid[(row * columns) + col] =newValue
}
}
//定义下标
}
class
SquareMatrix: DoubleDimensionalArray {
override subscript(row: Int, col: Int)-> Int {
//重写父类下标
get {
return
super
.grid[(row * columns) +col]
}
set {
super
.grid[(row * columns) + col] =newValue * newValue
}
}
}
var ary2 =SquareMatrix(rows:
5
, columns:
5
)
for
var i =
0
; i <
5
;i++ {
for
var j =
0
; j <
5
; j++ {
ary2[i,j] = i + j
}
}
for
var i =
0
; i <
5
;i++ {
for
var j =
0
; j <
5
; j++ {
print(
"\t\t \(ary2[i,j])"
)
}
print(
"\n"
)
}
|
其中super.grid[(row * columns) + col]语句中使用super调用父类的grid属性。
其中super.grid[(row * columns) + col] = newValue * newValue语句是给父类的grid属性赋值。
本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747531,如需转载请自行联系原作者