属性初始值设定项在 'self' 可用之前运行错误

时间:2021-06-30 22:53:43

标签: swift xcode self xcode12 initializer

我正在学习一个教程,想自己将一个功能添加到倒数计时器中。但是,我收到错误:

<块引用>

不能在属性初始值设定项中使用实例成员“timeRemaining”;属性初始值设定项在 'self' 可用之前运行

似乎造成问题的代码在这里:

@State private var timeRemaining: CGFloat = defaultTimeRemaining

var i = timeRemaining
    func timeString(time: TimeInterval) -> String {
            let minute = Int(time) / 60 % 60
            let second = Int(time) % 60

            return String(format: "%02i:%02i",  minute, second)
        }

抱歉,如果这是一个基本问题/问题。这是我第一次使用 Xcode :)

1 个答案:

答案 0 :(得分:0)

swift 中的所有属性必须在初始化之前设置。 考虑一下这段代码。

class MyObj {

     var value1 = 1
     var value2 = value1 + 1
     init(){}
}

swift中的init需要设置value1和value2才能返回self

在这种情况下它不能,因为 value2 需要设置 self.value1 但 value1 需要设置 self 因为它是一个实例 var

考虑这个代码

class myObj {

  var value1 = 1
  lazy var value2: Int = {
      value1 + 1
  }()
  init(){}
}

这是一个例外,我们保证在 init 之后为实例 var 提供一个值。 为此,我们将其设置为惰性并提供在第一次访问时发生的闭包。

这就像强制解包一个值,但该值的 init 是一个块。

如果在设置时不需要实例变量,也可以使用类方法或静态方法来获取值。

var value2 = MyObj.onePlusOne()

class func onePlusOne() -> Int {
      1 + 1
}