Swift类属性 - 这需要初始化吗?

时间:2014-07-04 21:11:49

标签: initialization swift

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属性,这似乎很奇怪。我想知道我是否错过了某些内容,而且无需初始化程序就可以设置属性的默认值。

1 个答案:

答案 0 :(得分:1)

你没有错过任何东西。如果要在初始化中使用其他属性,则必须使用初始化方法。