Есть ли способ иметь глобальную переменную между представлением SwiftUI и классами, косвенно связанными с ним? - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю над проектом MacOS Swift (с SwiftUI), и у меня возникают проблемы с обновлением текстовой метки при возникновении события.

struct ContentView: View {
    @State var now = globalString.stringy
    var body: some View {
        VStack {
            Text(now)
            .frame(maxWidth: .infinity, maxHeight: .infinity)
        }.onAppear {
             k.start()

        }

    }

}

struct globalString {
    static var stringy = ""
    static var temperature = 0.0
}

Переменная now, указанная выше, относится к глобальной переменной в структуре, которая изменяется во время работы программы (в другом классе, на который нет ссылки в этом коде), но изменения в переменная не будет отображаться в текстовой метке.

Как я могу создать переменную, которая является общей для этого представления и этого класса, при этом обновляя мое представление, когда в переменной есть изменение? Изменения, внесенные в переменную, находятся в отдельном файле.

Я пытался использовать наблюдаемый объект и объект окружающей среды, но ни один из них не работал.

Если кто-то может помочь, я был бы очень признателен. Спасибо!

1 Ответ

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

Чтобы внести изменения в представление SwiftUI, поскольку оно является элементом stati c из-за своего объявления структуры, ваш объект GlobalString должен соответствовать ObservableObject, чтобы иметь возможность вносить изменения в представление в реальном времени, и его переменные должны соответствовать @ Опубликовано.

class GlobalString: ObservableObject {
  @Published var stringy = ""
  @Published var temperature = 0.0
}

struct ContentView: View {

  @ObservedObject var globalString = GlobalString()

  var body: some View {
    VStack {
      Text(globalString.stringy)
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }.onAppear {
      k.start()
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...