Swift编程语言指南,页面语言参考->Expressions,Postfix Expressions->Initializer Expression一节讨论语法

<expression>.init(<initializer arguments>)

您什么时候使用这个(除了语法的其他部分已经介绍过的self.init()super.init())?在我看来,在上述表达式有效的任何情况下(并且表达式不是selfsuper),您还可以执行以下操作:
<expression>(<initializer arguments>)

最佳答案

语法模板如下所示:

<expression>.init(<initializer arguments>)

语法将initializer-expression定义为:
initializer-expression → postfix-expression . init­

请注意,不包括调用参数。这与A.init这样的结构相匹配,并且是必需的,因为init是一个关键字,所以A.init将不匹配explicit-member-expression(它需要标识符而不是关键字作为成员名)。
初始值设定项表达式是语法的一部分,因为您可以调用属于所编写类的非直接超类的类的初始值设定项(在本例中,C调用A.init):
class A {
    var property: String
    init() {
        property = "hello"
    }
}

class B: A {
    init() {
        super.init()
        property = "goodbye"
    }
}

class C: B {
    init() {
        super.init()
        A.init()
    }
}

C().property // "hello"

我不认为有很多这样的用例,但是语法和编译器都允许它,并且这个例子编译和运行正确。
您还可以在全局范围内使用初始值设定项表达式,就像使用普通初始值设定项一样。以下两行是等效的:
String(10)
String.init(10)

关于initialization - Swift中expression.init()的用途是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24102244/

10-12 18:46