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

kokeuurv  于 2022-12-24  发布在  iOS
关注(0)|答案(1)|浏览(111)

我是Swift的新手,我正在努力使我的项目更加面向对象。
我正在为使用大疆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而不起作用)

igsr9ssn

igsr9ssn1#

所以我想明白了。
我用ObservableObject的实现创建了一个新的数据对象myObject。
此对象仅包含带有@Pubslished的变量。
然后在appController中,我存储了@ObservableObject myObject = myObject()
并将其连接到视图和产品通信服务。
在初始化对象时不要忘记o @Published和@ObservableObject

相关问题