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

iOS 13, Swift 5, Xcode 11.3.1

Learning SwiftUI. Я собрал это вместе, и это работает, но это правильно.

В External.swift

class BlobModel: ObservableObject {
  @Published var score: String = "" 
}

var globalBlob = BlobModel()

В ContentView.swift

struct ContentView: View {

@ObservedObject var globalBlob:BlobModel

var body: some View {
  Text("\(globalBlob.score)")
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
      ContentView(globalBlob: globalBlob)
    }
}

Когда я пишу в globalBlob в External.swift , он обновляет отображение.

globalBlob.score = backToString

Но globalBlob - это глобальная переменная, что, безусловно, является плохой практикой кодирования. Есть ли лучший способ, которым я должен был это сделать?

1 Ответ

2 голосов
/ 30 января 2020

Можете ли вы получить доступ к экземпляру Singleton из класса, который меняет счет? https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton

struct ContentView: View {

    @ObservedObject var globalBlob: BlobModel = BlobModel.sharedInstance

    var body: some View {
        VStack{
            Button(action: {self.globalBlob.score = Int.random(in: 0...100).description}, label: {Text("update-score")})
            Text("\(globalBlob.score)")
        }
    }

}

class BlobModel: ObservableObject {
    static let sharedInstance = BlobModel()
    @Published var score: String = ""
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...