首页 > 解决方案 > 在另一个 Observable Bool 变量中获取 Observable Bool 变量的结果?

问题描述

假设我们有这段代码:

var clientLinesLoaded:Bool = Bool() {
        didSet{
            print(clientLinesLoaded)
            if(clientLinesLoaded == true){
                print("->->->->->  clientLinesLoaded")
            }else{
                print("->->->->-> error loading...")
            }
        }
    }

var clientDatasLoaded:Bool = Bool() {
        didSet{
            print(clientDatasLoaded)
            if(clientDatasLoaded == true){
                print("->->->->->  clientLinesLoaded")
            }else{
                print("->->->->-> error loading...")
            }
        }
    }

当两个变量都设置为“true”时,我试图触发另一个 didSet

所以这就是我的想法...

override func viewDidLoad() {
        super.viewDidLoad()


var loaderMustDisappear:Bool = Bool(self.clientLinesLoaded && self.clientDatasLoaded) {
            didSet {
                print ("value is: ",loaderMustDisappear)
                if(loaderMustDisappear){
                    print("remove loader")
                    self.cargador.isHidden=true
                }else{
                    print("loading failed, do actions to control")
                }
            }
        }
}

前 2 个 didSet 在更改其值时正确触发。

问题是loaderMustDisappear 上的 didSet 从未被调用,我不确定为什么会发生这种情况......

有人处理过这样的情况吗?

谢谢大家!

标签: iosswiftobservable

解决方案


我不知道你的代码为什么会工作,因为loaderMustDisappear变量是在其中声明的,viewDidLoad并且你正在更改另一个函数的值clientLinesLoadedclientDatasLoaded来自另一个函数的值。

但是您可以使用closures. 在你的类中声明一个闭包:

var loaderMustDisappearClosure : (()->())?

在两个Bool变量中:

var clientLinesLoaded:Bool = Bool() {
    didSet{
        print(clientLinesLoaded)
        if(clientLinesLoaded == true){
            print("->->->->->  clientLinesLoaded")
            self. loaderMustDisappearClosure?()
        }else{
            print("->->->->-> error loading...")
        }
    }
}

var clientDatasLoaded:Bool = Bool() {
    didSet{
        print(clientDatasLoaded)
        if(clientDatasLoaded == true){
            print("->->->->->  clientLinesLoaded")
            self. loaderMustDisappearClosure?()
        }else{
            print("->->->->-> error loading...")
        }
    }
}

并在viewDidLoad

self.loaderMustDisappearClosure = {
    if self.clientLinesLoaded && self.clientDatasLoaded {
        print("Disappear Loader")
    }
}

self.clientLinesLoaded = true
self.clientDatasLoaded = true

true设置为.后何时执行此操作clientDatasLoaded。消失加载程序将在控制台中打印。所以你可以在课堂上的任何地方实现这一点。

希望这有助于您想要实现的目标。


推荐阅读