任何人都知道如何解决这个问题。在dateFormatter.string(from: date)
行,编译器说'不能在不可变值上使用变异的getter'。
struct viewModel {
private lazy var dateFormatter = { () -> DateFormatter in
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
var labelText: String? {
let date = Date()
return dateFormatter.string(from: date)
}}
我理解this链接中的内容,但上述情况可能有所不同。
答案 0 :(得分:7)
你需要一个变异的getter才能在self
上执行变异(例如访问一个惰性变量)。
struct ViewModel {
private lazy var dateFormatter = { () -> DateFormatter in
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy"
return formatter
}()
var labelText: String? {
mutating get {
let date = Date()
return dateFormatter.string(from: date)
}
}
}
答案 1 :(得分:0)
访问结构上的惰性属性改变结构以创建惰性属性,就像更改该属性上的 var
变量一样。
因此,在不允许在 lazy var
之后重新分配 var
的任何情况下,都不允许使用 init
。
这是相当不直观的,因为使用 lazy var
并不会“感觉”它在赋值后改变结构。但仔细想想,这正是正在发生的事情。