簡體   English   中英

復合類更改變量后重新加載視圖

[英]Reload view after composite class change variable

我是 Swift 的新手,我正在嘗試使我的項目更加面向對象。

我正在制作使用 DJI SDK 的應用程序,並且我試圖在復合類中的某些變量發生變化時更改視圖中的某些內容。

所以我有: AppController 中的代碼:

@main
struct AppController: App {
  @State var djiService = ProductCommunicationService()

  var body: some Scene {
    WindowGroup {
      InfoFormView(djiService: $djiService, rcEngineConn: $rcEngineConn,   bridgeStatus: $bridgeStatus, fpvMode: $fpvMode, libMode: $libMode)
        
    }
}

在 ProductCommunicationService 中幾乎沒有變量和邏輯

class ProductCommunicationService: NSObject {

    @Published var registered = false
    @Published var connected = false
    @Published var enableBridgeMode = false
    @Published var bridgeAppIP = "0.0.0.0"
    
    func registerWithSDK() {
    .....

我想做的是,當 ProductCom.. 類中的 som 變量發生變化時,我在下面刷新視圖

struct InfoFormView: View {

@Binding var djiService : ProductCommunicationService
@Binding var rcEngineConn : Bool
@Binding var bridgeStatus : Bool
@Binding var fpvMode : Bool
@Binding var libMode : Bool

var body: some View {
    HStack(alignment: .top){
        VStack(alignment: .leading, spacing: 20) {
            Text("CR Fly Beta").font(.title).bold()
            Text("Connected to aircraft: " + (self.djiService.connected ? "Yes": "No")).font(.title)
            Text("Connected to RC: " + (self.rcEngineConn ? "Yes": "No")).font(.title)
            Text("Bridge Mode Status: " + (self.djiService.enableBridgeMode ? "On" : "Off")).font(.title)
            HStack(){
                if(self.djiService.connected){
                    Button("Lets FLY!"){
                        self.fpvMode = true
                    }.buttonStyle(.bordered).font(.title2)
                
                    Button("Photo Library"){
                        self.libMode = true
                    }.buttonStyle(.bordered).font(.title2)
                }
            }

有沒有辦法在變量更改時刷新它? 我嘗試了一切,還創建了帶有插入變量的 ProductComService(由於 @State 而不起作用)

所以我想通了。

我使用 ObservableObject 的實現創建了一個新的數據對象 myObject。

該對象僅包含帶有@Pubslished 的變量。

然后在 appController 中我存儲了 @ObservableObject myObject = myObject()

並將其橋接到視圖和 productCommServise。

不要忘記 @Published 和 @ObservableObject 每次初始化它的地方

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM