Классы и наблюдаемый объект - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь создать класс модели данных, на который могут ссылаться разные представления. Модель данных имеет функцию, которая может изменять одну из опубликованных переменных. Однако эта функция вызывается внутри одного представления, а изменение, которое она вносит в опубликованную переменную, не отражается в других представлениях, которые также ссылаются на класс. Самый простой пример, который я могу придумать: опубликованная переменная. Однако изменение этой переменной не отражается в тексте TextView, который также ссылается на класс «Данные».

Мне кажется, я не совсем правильно понимаю классы и observableObject. Будет ли кто-нибудь достаточно любезен, чтобы указать на мою ошибку здесь?

1 Ответ

1 голос
/ 04 марта 2020

Вы создаете два разных экземпляра Данных в ваших подпредставлениях, вместо этого вам нужно поделиться одним, поэтому создайте его в ContentView и перейдите к подпредставлениям, как показано ниже

struct ContentView: View {
    @ObservedObject var data = Data()
    var body: some View {
        VStack {
            TextView(data: data)
            ButtonView(data: data)
        }
    }
}

struct TextView: View {

    @ObservedObject var data: Data

    var body: some View {
        Text(data.currentWord)
    }
}

struct ButtonView: View {

    @ObservedObject var data: Data

    var body: some View {
        Button(action: {self.data.randomWord()}) {
            Text("Random word")
        }
    }
}

Также, как вариант, для таких В сценарии можно использовать EnvironmentObject шаблон. Здесь можно найти множество примеров использования SO объектов окружающей среды - просто поиск по ключевым словам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...