繁体   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