我有 ViewContA(父母)和 ViewContB(是 ViewContA 的孩子)
當用戶資料發生變化時,ViewContA 從 firebase 監聽,所以我希望 ViewContB 立即更新資料。
我的代碼
protocol childVCDelegate {
var user: User? { get set }
}
class ViewContA: UIViewController{
var user: User?
let VCB = ViewContB()
VCB.delegate = self
//viewdidload
loadUser()
func loadUser(){
// this function observe childChanged in realtime firebase
UserService.shared.observeUser(uid: "XXX") { (user_updated) in
// here update the user info in ViewContA but not in ViewContB
self.user = user_updated
}
}
}
class ViewContB: UIViewController{
var delegate: childVCDelegate
var user: User?{
delegate?.user
}
//viewdidload
// USER IS ALWAYS THE SAME, NOT CHANGE WHEN FIREBASE FIRE loadUser in Parent
print(user)
}
非常感謝!
uj5u.com熱心網友回復:
如果您想使用委托設計模式,以便在 Firebase 中的用戶串列發生更改時,視圖控制器 A 通知視圖控制器 B,那么您應該使視圖控制器 B 成為視圖控制器 A 的委托。定義一個協議,我們稱之為 UsersProtocol,它有一個方法userHasChanged(_ user: User?)。當 firebase 完成處理程式觸發時,呼叫該方法:
protocol UsersProtocol {
func userHasChanged(_ user: User?)
}
class ViewContA: UIViewController{
var delegate: UsersProtocol? = nil
func loadUser(){
// this function observe childChanged in realtime firebase
UserService.shared.observeUser(uid: "XXX") { (user_updated) in
// here update the user info in ViewContA but not in ViewContB
self.user = user_updated
self.delegate?.userHasChanged(user_updated)
}
}
}
(請記住,您需要將 ViewContA 的委托設定為指向 ViewContB。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427950.html
