Избегать повторения методов собственности - PullRequest
0 голосов
/ 21 января 2020

У меня есть этот повторяющийся шаблон с установщиками для свойства токена уведомления

Как только свойство установлено в nil, затем также удаляется из наблюдения

, как заменить и избежать этого повторения кода свойства методы с легким решением?

var nt1: Any? {
    willSet {
        if let nt1 = nt1 {
            NotificationCenter.default.removeObserver(nt1)
            self.nt1 = nil
        }
    }
}
var nt2: Any? {
    willSet {
        if let nt = nt2 {
            NotificationCenter.default.removeObserver(nt)
            self.nt2 = nil
        }
    }
}
var nt3: Any? {
    willSet {
        if let nt = nt3 {
            NotificationCenter.default.removeObserver(nt)
            self.nt3 = nil
        }
    }
}

1 Ответ

3 голосов
/ 21 января 2020

Вы можете создать @propertyWrapper. Он был представлен в Swift 5.1

@propertyWrapper
struct UnsubscribeOnNil<Value: Any> {
    init(wrappedValue: Value?) {
      self.value = wrappedValue
    }

    private var value: Value?

    var wrappedValue: Value? {
        get { value }
        set {
            if newValue == nil, let oldValue = value {
                NotificationCenter.default.removeObserver(oldValue)
            }
            value = newValue
        }
    }
}

И используйте его для свойств:

@UnsubscribeOnNil var nt1: Any?
@UnsubscribeOnNil var nt2: Any?
@UnsubscribeOnNil var nt3: Any?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...