'不能在不可变值上使用可变 getter:'self' 在迭代时是不可变的?

Hel*_*rld 4 ios swift swift5 swiftui

有谁知道为什么self.indexCountForEach给出错误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")
           }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

mat*_*att 5

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

var indexCount : Int { array[0].count }
Run Code Online (Sandbox Code Playgroud)

这是更好,无论如何,因为它永远是正确的:indexCount将始终是当前的大小array[0]),而你的方式,该值将冻结在无论count是在第一时间就被取出。