Swiftui 无法对不可变值&x27;自我';是不变的

Swiftui 无法对不可变值&x27;自我';是不变的,swiftui,getter,swift5.2,Swiftui,Getter,Swift5.2,因此,我一直在试图解决这个问题,这个问题已经在这里讨论了好几次,但我似乎无法真正理解这个问题来自何处,以及如何在我的应用程序中解决它。很抱歉,如果这是显而易见的,但我已经拿起SwiftUI一周前 基本上,我在这里做的是,我有一个名为countStrokes()的函数,其中我有一个字符串数组作为输入。首先,我将数组转换为int数组,然后计算数组的和,并将和作为字符串返回。 在此之后,我声明了一个名为strokes的新惰性变量,并通过调用countStrokes()函数对其进行初始化。 在视图中,我

因此,我一直在试图解决这个问题,这个问题已经在这里讨论了好几次,但我似乎无法真正理解这个问题来自何处,以及如何在我的应用程序中解决它。很抱歉,如果这是显而易见的,但我已经拿起SwiftUI一周前

基本上,我在这里做的是,我有一个名为
countStrokes()
的函数,其中我有一个字符串数组作为输入。首先,我将数组转换为int数组,然后计算数组的和,并将和作为
字符串返回。
在此之后,我声明了一个名为
strokes
的新惰性变量,并通过调用
countStrokes()
函数对其进行初始化。 在
视图中,我只想使用
Text()
模块打印笔划值。 任何关于如何修改我现有代码的想法都将不胜感激

import SwiftUI

struct Skore: View {
    @State var skore: [String]

    lazy var strokes: String = countStrokes(array: skore)
    var body: some View {
        Text(strokes)
    }
}

func countStrokes(array: [String]) -> String {
    let newArray = array.compactMap{Int($0)}
    let total = newArray.reduce(0, +)
    let totalString = String(total)

    return totalString
}

你能做的是:

struct Skore: View {
@State var skore: [String]
@State var strokes: String = ""
var body: some View {
    Text(strokes).onAppear(perform: loadData)
}
func loadData() {
    self.strokes = countStrokes(array: skore)
}
}

func countStrokes(array: [String]) -> String {
let newArray = array.compactMap{Int($0)}
let total = newArray.reduce(0, +)
let totalString = String(total)
return totalString
}

struct ContentView: View {
@State var skore = ["1","2","3"]
var body: some View {
    Skore(skore: skore)
}
}

你能做的是:

struct Skore: View {
@State var skore: [String]
@State var strokes: String = ""
var body: some View {
    Text(strokes).onAppear(perform: loadData)
}
func loadData() {
    self.strokes = countStrokes(array: skore)
}
}

func countStrokes(array: [String]) -> String {
let newArray = array.compactMap{Int($0)}
let total = newArray.reduce(0, +)
let totalString = String(total)
return totalString
}

struct ContentView: View {
@State var skore = ["1","2","3"]
var body: some View {
    Skore(skore: skore)
}
}

最简单的方法就是内联使用函数。只要您的视图依赖于
skore
状态和
countStrokes
依赖于它,一旦
skore
将被修改,相应的
文本将被重新计算并显示正确的结果

struct Skore: View {
    @State var skore: [String]

    var body: some View {
        Text(countStrokes(array: skore))
    }
}

最简单的方法就是内联使用函数。只要您的视图依赖于
skore
状态和
countStrokes
依赖于它,一旦
skore
将被修改,相应的
文本将被重新计算并显示正确的结果

struct Skore: View {
    @State var skore: [String]

    var body: some View {
        Text(countStrokes(array: skore))
    }
}

为什么它是懒惰的而不是计算的?为什么它是懒惰的而不是计算的?