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第二阶段初始化开始

*/

/**

*/

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...