不能在不可变值上使用变异getter:'self'是不可变的

问题描述 投票:0回答:2

因此,我一直在尝试解决这里已经讨论过几次的问题,但是我似乎无法真正理解问题的根源以及如何在应用程序中解决它。抱歉,这很明显,但一周前我就接过SwiftUI。

[基本上,我在这里所做的是,我有一个名为countStrokes()的函数,其中有一个字符串数组作为输入。首先,我将数组转换为int数组,然后计算该数组的总和,并将其总和返回为String。之后,我声明一个名为strokes的新惰性变量,并通过调用countStrokes()函数对其进行初始化。我要在View中做的就是使用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
}
swiftui getter swift5.2
2个回答
0
投票

您可以做的是这个:

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)
}
}

0
投票

最简单的就是使用内联函数。一旦您的视图依赖于skore状态并且依赖于countStrokes状态,则一旦修改skore,就会重新计算相应的Text并显示正确的结果。

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

    var body: some View {
        Text(countStrokes(array: skore))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.