首页 > 解决方案 > '不能在不可变值上使用变异getter:'self'是不可变的'迭代时?

问题描述

有谁知道为什么self.indexCountinForEach给出错误Cannot use mutating getter on immutable value: 'self' is immutable错误?我可以提供aViewindexCount但不是很方便。我没有改变 indexCount。这是 SwiftUI 错误还是故意的?

struct aView: View {
    let array: [[String]]
    lazy var indexCount: Int = array[0].count

    var body: some View {
        VStack {
            ForEach(0..<self.indexCount, id: \.self) { index in
                Text("Hello World")
           }
        }
    }
}

标签: iosswiftswiftuiswift5

解决方案


这是故意的。在 SwiftUI 中,只有@State变量可以改变。你不能使用lazy var这样的。将其替换为计算属性:

var indexCount : Int { array[0].count }

无论如何,这会更好,因为它始终是正确的:indexCount将始终是 ) 的当前大小array[0],而按照您的方式,该值将冻结在count一次获取时的任何值。


推荐阅读