Swift:在init中调用self方法

时间:2015-01-17 15:49:15

标签: swift

我想实现这样的事情:

class A {
    var a, b, c, d: Int

    init() {
        reset()
    }

    func reset() {
        a = 1
        b = 2
        c = 3
        d = 4
    }

    func blablabla() { 
        ...
    }
}

无法编译,错误消息:

  

在初始化之前使用变量“self.a”

我必须将代码从reset()复制到init(),这是没有意义的。

是缺陷还是有其他方法可以做到?

2 个答案:

答案 0 :(得分:11)

不,这不是缺陷,在初始化所有存储的属性之前,只能在初始化程序中引用self,并且已调用超类初始值设定项(如果有的话)。

在你的情况下,在方法中进行初始化似乎是合法的,并从初始化程序调用它,但不幸的是它不起作用。

可能的解决方案:

  • 使属性可选或隐式展开(不鼓励,除非你真的需要它们的选项)
  • 在调用reset之前使用假值初始化属性:

    init() {
        self.a = 0
        self.b = 0
        self.c = 0
        self.d = 0
    
        reset()
    }
    

    var a = 0
    var b = 0
    var c = 0
    var d = 0
    
    init() {
        reset()
    }
    

答案 1 :(得分:3)

给出a,b,c和d默认值,特别是如果您要立即更改它们。