首页 > 解决方案 > 属性初始化程序在“自我”可用之前运行错误

问题描述

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

不能在属性初始化器中使用实例成员“timeRemaining”;属性初始化程序在“自我”可用之前运行

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

@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 :)

标签: swiftxcodeselfxcode12initializer

解决方案


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(){}
}

这是一个例外,我们保证我们将在初始化之后为实例 var 提供一个值。我们通过将其设置为惰性并提供一个在第一次访问时发生的闭包来做到这一点。

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

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

var value2 = MyObj.onePlusOne()

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

推荐阅读