简体   繁体   English

复合类更改变量后重新加载视图

[英]Reload view after composite class change variable

I'm new in Swift and I'm trying to do my project more object oriented.我是 Swift 的新手,我正在尝试使我的项目更加面向对象。

Im making app for using DJI SDK, and I'm trying to change some things in view when some variable changes in composite class.我正在制作使用 DJI SDK 的应用程序,并且我试图在复合类中的某些变量发生变化时更改视图中的某些内容。

So I have: Code in AppController:所以我有: 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)
        
    }
}

And in ProductCommunicationService there is few variables and logic在 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() {
    .....

What I'm trying to do, is refresh view I have below when som variable in ProductCom.. class changes我想做的是,当 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)
                }
            }

Is there any way to refresh it when variable changes?有没有办法在变量更改时刷新它? I tried everything, also creating ProductComService with inserted variables(which didn't work because of @State)我尝试了一切,还创建了带有插入变量的 ProductComService(由于 @State 而不起作用)

So I figured it out.所以我想通了。

I created a new object of data myObject with implementation of ObservableObject.我使用 ObservableObject 的实现创建了一个新的数据对象 myObject。

This object contained just variables with @Pubslished.该对象仅包含带有@Pubslished 的变量。

Then in appController I stored @ObservableObject myObject = myObject()然后在 appController 中我存储了 @ObservableObject myObject = myObject()

And bridged it to a view and productCommServise.并将其桥接到视图和 productCommServise。

Don't forget o @Published and @ObservableObject every where you initialize it不要忘记 @Published 和 @ObservableObject 每次初始化它的地方

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM