swift - 属性初始化程序在“自我”可用之前运行错误
问题描述
我正在学习一个教程,并想自己将一个功能添加到倒数计时器中。但是,我收到错误:
不能在属性初始化器中使用实例成员“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 :)
解决方案
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
}
推荐阅读
- kotlin - 未解决的参考:切换到视图绑定后的 myViewHolder
- python - 从 csv 文件中读取字典
- r - Shiny 基于数字输入创建新变量并绘制由我自己解决
- php - PHP 从从 url 传递的数组中获取数据
- angular - Angular ng Snotify 不生成错误消息
- wordpress - 有没有办法在已完成的订单电子邮件模板中自动插入每个订单的发货跟踪号
- excel - 将任何日期添加到相应单元格时,如何编写公式以删除excel中单元格中的值
- python-3.x - 如何使用 tf.gather 从第一个轴切片值?
- c - GStreamer C 库在 Xubuntu 上无法正常工作
- java - 实施 Runnable 未显示正确结果