使用' self'在方法电话' f'在初始化所有存储的属性之前

时间:2017-06-01 04:19:40

标签: swift

A:f()只是打印 HeHe 并且它不会使用任何属性(在这种情况下只有一个:a。)或任何'自我' - 编译指出的东西。所以我想知道编译器是否意味着self.f()?

class A {
    var a: String
    init(a: String) {
        f()
        self.a = a
    }

    func f() {
        print("HeHe")
    }
}

错误消息:

PlayGround.playground:4:9: error: use of 'self' in method call 'f' before all stored properties are initialized
    f()
    ^

2 个答案:

答案 0 :(得分:1)

如果您没有使用函数调用self撰写f,那么它并不意味着selff开始引用init仍然是实例方法,所以在f()之后必须在初始化所有实例属性之后调用它,这意味着在初始化类的实例之后。因此,只需在initialized实例属性a后调用class A { var a: String init(a: String) { self.a = a f() } func f() { print("HeHe") } }

{{1}}

答案 1 :(得分:1)

在使用struct或class之前,必须初始化每个存储的属性(默认值或使用init' s)。期。在初始化类之前,您正在调用类方法。即使该方法不使用或访问类属性。