Как обновить текст наблюдателями свойств в ContentView при изменении входной переменной - PullRequest
0 голосов
/ 03 апреля 2020

Используя XCode 11.4, Swift 5.0

Я бы хотел, чтобы переменная Text (correctionLabel) в ContentView обновлялась всякий раз, когда создаваемая мной переменная (сохранялась у пользователя приложения) по умолчанию) изменено. Приведенный ниже код демонстрирует мою попытку использовать didSet для обновления текста в ContentView при каждом изменении входной переменной:

//ContentView.swift
//this is a single page application


import SwiftUI

let defaults = UserDefaults.standard

var correctionLabel = Text("O")
var corrections = defaults.integer(forKey: "CorrectionCount") {
    didSet {
        correctionLabel = Text("\(corrections)")
        print("old value is \(oldValue) and new value is \(corrections)")
        print(correctionLabel)
    }
}

struct ContentView: View {
    var body: some View {

        correctionLabel

    }
}

//code for incrementing the corrections variable not shown here

Все остальное с приложением было проверено и работает, проверка с помощью print() испытаний чтобы убедиться, что переменная corrections действительно увеличивается при изменении ориентации iPhone. Однако экранный счетчик начинается с 0, но никогда не увеличивается, и консоль отображает эту ошибку для print(correctionLabel):

Text(storage: SwiftUI.Text.Storage.anyTextStorage(SwiftUI.(unknown context at $1cf871518).LocalizedTextStorage), modifiers: [])

Мне кажется, что проблема должна быть незначительной, и я что-то здесь упускаю, поскольку желаемый конечный продукт представляет собой простой экранный счетчик, который начинается с 0 и увеличивается на 1 постепенно. Любое понимание очень ценится!

1 Ответ

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

Нашел решение:

Я использовал реализацию @EnvironmentObject, которая является новой для SwiftUI, см. Хороший учебник здесь: https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views

, если вы используя функцию внутри класса, как я должен был обновить вашу переменную (в данном случае это была корректирующая переменная), убедитесь, что вы ссылаетесь на тот же экземпляр функции класса, а не вызываете новый экземпляр функции класса!

...