Получить результат переменных Observable Bool в другой переменной Observable Bool? - PullRequest
0 голосов
/ 29 августа 2018

скажем, у нас есть этот кусок кода:

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...")
            }
        }
    }

Я пытаюсь запустить еще один didSet, когда обе переменные установлены в "true"

Так вот о чем я думал ...

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 работают корректно, когда они меняют свои значения.

Проблема в том, что didSet на загрузчике никогда не называется , и я не уверен, почему это происходит ...

Кто-нибудь имел дело с такой ситуацией?

Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Я не понимаю ваше утверждение Bool(self.clientLinesLoaded && self.clientDatasLoaded), но, вероятно, это никогда не вызовет вашу переменную. Попробуйте установить loaderMustDisappear внутри обеих переменных. Я думаю, что код ниже должен работать для вас:

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

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

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


override func viewDidLoad() {
    super.viewDidLoad()

Я создал базовый код для легкого понимания:

class ViewController: NSViewController {
var var1: Bool = Bool() {
    didSet{
        var12 = var1 && var2
    }
}

var var2: Bool = Bool() {
    didSet{
        var12 = var1 && var2
    }
}
var var12: Bool = Bool() {
    didSet {
        print("var12 is \(var12)")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Testing:
    var1 = true
    var2 = true
    var1 = false
    }
}
0 голосов
/ 29 августа 2018

Я не знаю точно, почему ваш код будет работать или нет, потому что переменная loaderMustDisappear объявлена ​​в viewDidLoad, а вы изменяете значения clientLinesLoaded и clientDatasLoaded из другой функции.

Но вы можете достичь этого, используя 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. Исчезнувший загрузчик распечатает в консоли. Так что вы можете достичь этого из любой точки класса.

Надеюсь, это поможет вам достичь.

...