Swift--12构造方法

前端之家收集整理的这篇文章主要介绍了Swift--12构造方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

//构造方法的目的就是确保类的所有非lazy存储属性进行初始化

//可选类型的存储属性可以不用初始化(默认为nil)


class Point {

var x: Int = 0

var y: Int = 0

var z: Int?

init () {

//缺省构造方法(存储属性有初始值)

print("缺省init")

}

//指定构造方法,内部参数名也是外部标签

init (x: Int,y: Int) {

//带参的构造方法

self.x = x

self.y = y

print("带参init")

}

//便利构造方法

convenience init (x: Int) {

// self.x = x

// y = 100

//若想在构造方法中使用self.init,前面必须添加convenience(便利)

//若构造方法添加convenience,则方法中必须使用self.init

self.init(x: x,y: 100)

}

convenience init (z: Int) {

//便利构造方法中也可以调用其他便利构造方法

self.init(x: 50)

//两段式构造方法self的使用不能放在self.init之前

//防止出现使用未初始化变量的情况

print("遍历构造方法\(x)")

}

func testFunc() {

print("用于重写")

}

final func testFunc2() {

print("不能被重写")

}

}


var p1 = Point()

var p2 = Point(x: 100,y: 100)

var p3 = Point(x: 20)

var p4 = Point(z: 100)


/*继承

1swift的继承仍然是单继承

2、构造方法无法继承,普通方法属性都可继承

3调用父类方法使用super关键字

4、重写父类方法使用override关键字

5、不想被重写的父类方法前加final关键字

*/

class SubPoint: Point {

var w: Int

init(w: Int) {

self.w = w

//子类中必须通过父类的构造方法进行属性初始化

//两段式构造要求:只能放在子类的属性初始化之后进行调用

//子类中只能通过调用父类的指定构造方法初始化属性

super.init()

//不能是遍历构造方法

//super.init(x: 100)

}

override func testFunc() {

print("父类重写")

}

//子类中不能重写

//override func testFunc2() {}

}


/*


构造器链

为了简化指定构造器和便利构造器之间的调用关系,

Swift采用以下三条规则来限制构造器之间的代理调用

规则1:指定构造器必须调用其直接父类的的指定构造器。

规则2:便利构造器必须调用同一类中定义的其它构造器。

规则3:便利构造器必须最终以调用一个指定构造器结束。

一个更方便记忆的方法是:

1、指定构造器必须总是向上代理

2、便利构造器必须总是横向代理


*/

猜你在找的Swift相关文章