因此,我一直在尝试解决这里已经讨论过几次的问题,但是我似乎无法真正理解问题的根源以及如何在应用程序中解决它。抱歉,这很明显,但一周前我就接过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
}
您可以做的是这个:
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
,就会重新计算相应的Text
并显示正确的结果。
struct Skore: View {
@State var skore: [String]
var body: some View {
Text(countStrokes(array: skore))
}
}