Swift中的阶段1和阶段2初始化

pot*_*ato 4 initialization swift

这是Apple Swift文档的副本:

只要超类的所有属性都具有初始值,就会认为其内存已完全初始化,并且第1阶段已完成.

超类的指定初始化程序现在有机会进一步自定义实例(尽管它没有).

一旦超类的指定初始化程序完成,子类的指定初始化程序就可以执行额外的自定义(尽管它也不需要).

所以基本上第1阶段确保所有属性都有一个值并将值赋给它们.在阶段2中,这些属性进一步定制.而这种进一步的定制确实让我感到沮丧,因为我无法想到使用进一步定制的单个例子.您能给我一个简单的初始化行为示例,或者提供第1阶段和第2阶段的其他说明吗?谢谢

Ian*_*Ian 10

给定2个类Foo和Bar,其中Bar是Foo的子类:

class Foo {
    var a: Int?
    var b: Int?

    init() {
        a = 1
    }
}

class Bar: Foo {
    var c: Int?

    override init() {
        super.init() // Phase 1

        // Phase 2: Additional customizations
        b = 2
        c = 3
    }
}
Run Code Online (Sandbox Code Playgroud)

当你调用Bar()它时super.init(),第一行是初始化超类Foo的调用.因此,一旦完全初始化Foo的属性,就可以在Foo的初始化程序中设置它们.这由a = 1Foo初始化器中的表示.

一旦完成,阶段2开始,继续super.init()行后的Bar的初始化.您可以在bar或其超类的实例上"执行其他自定义".这由b = 2和表示c = 3.

let x = Bar()
x.a // 1
x.b // 2
x.c // 3
Run Code Online (Sandbox Code Playgroud)