下标是一种特殊属性。子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器。
下面看一个示例:
classDoubleDimensionalArray{ letrows:Int,columns:Int vargrid:[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{ returngrid[(row*columns)+col] } set{ grid[(row*columns)+col]=newValue } }//定义下标 } classSquareMatrix:DoubleDimensionalArray{ overridesubscript(row:Int,col:Int)->Int{//重写父类下标 get{ returnsuper.grid[(row*columns)+col] } set{ super.grid[(row*columns)+col]=newValue*newValue } } } varary2=SquareMatrix(rows:5,columns:5) forvari=0;i<5;i++{ forvarj=0;j<5;j++{ ary2[i,j]=i+j } } forvari=0;i<5;i++{ forvarj=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_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php