我正在学习一个教程,想自己将一个功能添加到倒数计时器中。但是,我收到错误:
<块引用>不能在属性初始值设定项中使用实例成员“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 :)
答案 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
}