Firebase同步请求未调用状态变量更改,SwiftUI

Firebase同步请求未调用状态变量更改,SwiftUI,swiftui,synchronization,state,Swiftui,Synchronization,State,我保持firebase请求同步以从db中检索值(值由后端更改) 当值更改时,调用firebase请求,更改计数值,但不调用onChange(由于swift比较引用的事实?)。下面是带有OO的代码。从swiftui的角度来看,这是没有意义的,但这只是为了表明在使用Firebase sync请求时视图不同步(值为) 快照在哪里?谢谢您的评论。因为它是基于firebase请求的,因此不容易复制,所以我没有包括它。事实:奎。保持同步(对)。事实:当db中的值发生变化时,计数值会更新。网络调用可能不应该在

我保持firebase请求同步以从db中检索值(值由后端更改)

当值更改时,调用firebase请求,更改计数值,但不调用onChange(由于swift比较引用的事实?)。下面是带有OO的代码。从swiftui的角度来看,这是没有意义的,但这只是为了表明在使用Firebase sync请求时视图不同步(值为)


快照在哪里
?谢谢您的评论。因为它是基于firebase请求的,因此不容易复制,所以我没有包括它。事实:奎。保持同步(对)。事实:当db中的值发生变化时,计数值会更新。网络调用可能不应该在视图中进行,而应该在ObserveObject中进行。谢谢jnpdx。此时,我已使用OO从请求中获取更新。但是,即使调用了onReceive;将OO中的值赋给count(state var)根本不会更新视图(onChange仍然没有调用),视图也没有udpated。这是很困难的,因为必须在某一点上指定值以计算要更新的视图。通过手动(onTap),没有问题,而且,onReceive在感觉需要时被真正调用,到目前为止还不可靠
class GlobalOO: ObservableObject {
    @Published var  multiV :String = "0"
}

import SwiftUI
import Firebase



private var multiSelectQuery : DatabaseReference!
private var handle :DatabaseHandle!



struct SearchToolBar: View {


@ObservedObject var globalOO = GlobalOO()



var body: some View {
    
    
    Text(globalOO.multiV)
        
        .onReceive(globalOO.$multiV, perform: { _ in
            
            print("received")
            
        })
        
        
        .onAppear{
          
              //this pat is only to update value in the db
            DispatchQueue.main.asyncAfter(deadline: .now()+3){
                Global.myRef.child(Strings.dbname_states).setValue("5")
                
            }
            DispatchQueue.main.asyncAfter(deadline: .now()+6){
                Global.myRef.child(Strings.dbname_states).setValue("7")
                
            }
            
           //
            
            multiSelection()
        }
    
    
    
}

private func multiSelection(){
    
    multiSelectQuery = Global.myRef.child(Strings.dbname_states)
    multiSelectQuery.keepSynced(true)
    
    handle =   multiSelectQuery.observe(.value,with :{(snapshot) in
        
        let multiValue:String = snapshot.value! as! String
        
        globalOO.multiV = multiValue

        print("DDD",globalOO.multiV)
        
    })
    
    
    
}


}