当前位置:首页 > Swift中文版教程
varshape=Shape() shape.numberOfSides=7
varshapeDescription=shape.simpleDescription()
这个版本的Shape类有些重要的东西不在:一个构造器来在创建实例时设置类。使用init来创建一个。
classNamedShape{ varnumberOfSides:Int=0 varname:Stringinit(name:String){ self.name=name }//bygashero
funcsimpleDescription()->String{
return\} }
注意self用来区分name属性和name参数。构造器的生命跟函数一样,除了会创建类的实例。每个属性都需要赋值,无论在声明里还是在构造器里。
使用deinit来创建一个析构器,来执行对象销毁时的清理工作。
子类包括其超类的名字,以冒号分隔。在继承标准根类时无需声明,所以你可以忽略超类。
子类的方法可以通过标记override重载超类中的实现,而没有override的会被编译器看作是错误。编译器也会检查那些没有被重载的方法。
classSquare:NamedShape{varsideLength:Doubleinit(sideLength:Double,name:String){self.sideLength=sideLengthsuper.init(name:name)numberOfSides=4}funcarea()->Double{returnsideLength*sideLength}overridefuncsimpleDescription()->String{return\e:\ Note 练习
编写另一个NamedShape的子类叫做Circle,接受半径和名字到其构造器。实现area和describe方法。
属性可以有getter和setter。
classEquilateralTriangle:NamedShape {
varsideLength:Double=0.0
init(sideLength:Double,name:String){ self.sideLength=sideLength super.init(name:name) numberOfSides=3 }
varperimeter:Double{ get{
return3.0*sideLength } set{
sideLength=newValue/3.0 } }
overridefuncsimpleDescription()->String{
return\} }
vartriangle=EquilateralTriangle(sideLength:3.1,name:\triangle.perimeter triangle.perimeter=9.9 triangle.sideLength
在perimeter的setter中,新的值的名字就是newValue。你可以提供一个在set之后提供一个不冲突的名字。
注意EquilateralTriangle的构造器有3个不同的步骤:
设置属性的值调用超类的构造器改变超类定义的属性的值,添加附加的工作来使用方法、getter、setter也可以在这里
如果你不需要计算属性,但是仍然要提供在设置值之后执行工作,使用willSet和didSet。例如,下面的类要保证其三角的边长等于矩形的变长。
classTriangleAndSquare{ vartriangle:EquilaterTriangle{ willSet{
square.sideLength=newValue.sideLength } }
varsquare:Square{ willSet{
triangle.sideLength=newValue.sideLength } }
共分享92篇相关文档