class Something {
...
}
class AnotherThing {
let foo: Something
init(something: Something) {
foo = something
}
}
class ReallyGreatClass {
let aSomething = Something();
let anotherThing = AnotherThing(something: aSomething);
}
ReallyGreatClass
抛出以下编译器错误:
ReallyGreatClass.Type没有名为' aSomething'
的成员
在小标题设置带有关闭或功能的默认属性值下的 Swift编程语言的初始化章节中,他们抛出了初始化属性的概念&#39 ;带有闭包的默认值;所以,让我们给它一个旋转:
let anotherThing: AnotherThing = {
return AnotherThing(something: aSomething)
}()
嗯,当然,这不起作用 - 它不是假设的。如章节中所述:
如果使用闭包来初始化属性,请记住在执行闭包时尚未初始化实例的其余部分。这意味着您无法从闭包中访问任何其他属性值,即使这些属性具有默认值也是如此。您也不能使用隐式self属性,也不能调用任何实例的方法。
因此,我发现解决此问题的唯一方法是使用初始化方法:
init() {
anotherThing = AnotherThing(something: aSomething)
}
但是,我需要一个单行初始化方法来设置anotherThing
属性,这似乎很奇怪。我想知道我是否错过了某些内容,而且无需初始化程序就可以设置属性的默认值。
答案 0 :(得分:1)
你没有错过任何东西。如果要在初始化中使用其他属性,则必须使用初始化方法。