13.4 Swift派生类构造方法的两段式构造

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

/**

13.4-派生类构造方法的两段式构造

*/

/**

两段式构造-构造过程可以划分为两个阶段

第一阶段,确保所有的存储属性都初始化完毕,

第二阶段,对父类中的存储属性做进一步的处理。

可以防止属性在被初始化之前访问,也可以防止属性被另外一个构造器意外的赋值。

*/

class A {

var a: Int

init(a: Int) {

self.a = a

}

}

class B: A {

var b: Int

func testFun() -> Void {

print("testFun")

}

init(a: Int,b: Int) {

// 派生类引入的属性进行初始化

print("B第一阶段初始化开始")

self.b = b

/** 第一阶段

1)不可以访问父类中的属性

2)不可以调用成员方法

*/

// testFun()

// 父类的指定构造方法对父的属性进行初始化

super.init(a: a)

print("第二阶段初始化开始")

if b > 100 {

self.a = 1000

}

testFun()

}

}

class C: B {

var c: Int

init(a: Int,b: Int,c: Int) {

C第一阶段初始化开始")

self.c = c

// 父类的指定构造方法对父的属性进行初始化

super.init(a: a,b: b)


print("第二阶段初始化开始")

if c > 100 {

self.a = 1000

self.b = 1000

}

}

}

class D: C {

var d: Int

init(a: Int,c: Int,d: Int) {

D第一阶段初始化开始")

self.d = d

super.init(a: a,b: b,c: c)

print("第二阶段初始化开始")

if d > 1000 {

self.a = 1000

self.b = 1000

self.c = 1000

}

}

}

var d = D.init(a: 0,b: 0,c: 0,d: 0)

/**

D第一阶段初始化开始

C第一阶段初始化开始

B第一阶段初始化开始

B第二阶段初始化开始

C第二阶段初始化开始

D第二阶段初始化开始

*/

/**

*/

猜你在找的Swift相关文章