Swift вызывает метод после 2 bool didset call - PullRequest
1 голос
/ 12 апреля 2019

У меня 2 bool с методом didset. Внутри обоих дидсетов он вызывал один и тот же метод. Поэтому я хочу вызвать метод после того, как 2 bool сделал наборы с именем

var canDo: Bool {
    didSet {
        reload()
    }
}

var isView: Bool {
    didSet {
        reload()
    }
}

Ответы [ 3 ]

2 голосов
/ 12 апреля 2019
var canDo: Bool {
    didSet {
        if isView{
            reload()
        }

    }
}

var isView: Bool {
    didSet {
        if canDo{
            reload()
        }

    }
}
0 голосов
/ 12 апреля 2019

Я бы предложил новую функцию для обработки логики, когда нужно вызывать reload(), вместо того, чтобы иметь логику в обоих didSet. Таким образом, если требуется добавить новую логику, ее можно добавить в одном месте:

var canDo: Bool {
    didSet { maybeReload() }
}

var isView: Bool {
    didSet { maybeReload() }
}

private func maybeReload() {
    guard
        canDo,
        isView
        else { return }

    reload()
}
0 голосов
/ 12 апреля 2019

Мы можем достичь этого с помощью Optionals

Теперь, когда обновите ваш код как

var canDo: Bool? {
    didSet {
        if isView != nil {
         reload()
        }
    }
}

var isView: Bool? {
    didSet {
        if canDo != nil {
         reload()
        }
    }
}

EDIT

Если вы имели в виду set как в true, просто игнорируйте вышеприведенное и добавьте

var canDo: Bool {
    didSet {
        if isView {
         reload()
        }
    }
}

var isView: Bool {
    didSet {
        if canDo {
         reload()
        }
    }
}
...