KVO в центре пользовательских уведомлений Swift - PullRequest
1 голос
/ 13 марта 2019

Используя шаблон наблюдателя, я пытаюсь создать свой собственный центр уведомлений.

Единственный способ, которым я могу вызвать значение наблюдателя, являющееся функцией, выглядит следующим образом:

observer.value(notification.notificationName, observer.value)

Это не может быть правдой, наблюдателю не нужно передавать значение наблюдателя..value, так что же может быть правильным ответом?

typealias Observer = (String, Any) -> Void

class MyNotification {
    var notificationName: String
    init(name: String) {
        notificationName = name
    }
}

class MyNotificationCenter {
    // var observers = [Observer]() // using an array here does not work
    var observers = [String: Observer]()

    // given
    // for notification name, the block to be executed when the notification is received
    func addObserver(forName name: String, usingBlock block: @escaping Observer) {
        // add observer to the array
        observers[name] = block
    }

    // given
    func removeObserver(forName name: String) {
        if observers[name] != nil {
            observers[name] = nil
        }
    }

    // not given
    func postNotification(notification: MyNotification) {
        // For each object in the observer array, call its processNotification() method
        for observer in observers {
            observer.value(notification.notificationName, observer.value)
        }
    }
}

class Boss {
    let obs1: Observer = { (name, data) in
        print (name, "HERE")
    }

    init() {
        notification.addObserver(forName: "test", usingBlock: obs1)
    }
}

var notification = MyNotificationCenter()
let boss = Boss()
notification.postNotification(notification: MyNotification(name: "test notification"))

Вопрос - в приведенном выше коде обозреватель.передал Observer.value, так как правильно интерпретировать этот код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...