Swift编程语言指南,页面语言参考->Expressions,Postfix Expressions->Initializer Expression一节讨论语法
<expression>.init(<initializer arguments>)
您什么时候使用这个(除了语法的其他部分已经介绍过的
self.init()
和super.init()
)?在我看来,在上述表达式有效的任何情况下(并且表达式不是self
或super
),您还可以执行以下操作:<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/