Swift: 在 init 中调用 self 方法

Swift: Call self method inside init

我想实现这样的东西:

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

    init() {
        reset()
    }

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

    func blablabla() { 
        ...
    }
}

无法编译,错误信息:

Variable "self.a" used before being initialized

我必须将代码从 reset() 复制到 init()

没有意义

这是缺陷还是有其他方法?

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

不,这不是缺陷,只是 self 不能在初始化程序中引用,直到所有存储的属性都已初始化,并且已调用超级 class 初始化程序(如果有)。

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

可能的解决方案:

  • 使属性可选或隐式展开(不鼓励,除非你真的需要它们可选)
  • 在调用之前用假值初始化属性 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()
    }