结构中的Lazy var

时间:2017-05-24 17:02:14

标签: swift

任何人都知道如何解决这个问题。在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链接中的内容,但上述情况可能有所不同。

2 个答案:

答案 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 并不会“感觉”它在赋值后改变结构。但仔细想想,这正是正在发生的事情。