Нельзя использовать изменяющий метод get для неизменного значения: «self» является неизменным - PullRequest
1 голос
/ 15 апреля 2020

Итак, я пытался исправить эту проблему, которая уже обсуждалась здесь несколько раз, но я не могу понять, откуда возникла проблема и как ее устранить в моем приложении. Извиняюсь, если это очевидно, но я поднял SwiftUI неделю a go.

В основном, что я делаю здесь, это то, что у меня есть функция с именем countStrokes(), где у меня есть массив строк как вход. Сначала я преобразовываю массив в массив int, затем вычисляю сумму массива и возвращаю сумму как 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
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Самое простое - просто использовать встроенную функцию. Как только ваш взгляд зависит от состояния skore и countStrokes зависит от него, после изменения skore соответствующий Text будет пересчитан и покажет правильный результат.

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

    var body: some View {
        Text(countStrokes(array: skore))
    }
}
0 голосов
/ 15 апреля 2020

что вы можете сделать это:

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