1

所以我一直在尝试解决这个已经在这里讨论过几次的问题,但我似乎无法真正理解问题来自哪里以及如何在我的应用程序中解决它。抱歉,如果这个很明显,但我一周前就开始使用 SwiftUI。

基本上我在这里所做的是我有一个名为的函数countStrokes(),其中我有一个字符串数组作为输入。首先,我将数组转换为 int 数组,然后计算数组的总和并将总和作为 a 返回String。之后,我声明了一个新的惰性 var 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
}
4

2 回答 2

0

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

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

    var body: some View {
        Text(countStrokes(array: skore))
    }
}
于 2020-04-15T04:13:46.663 回答
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)
}
}
于 2020-04-14T22:48:20.213 回答