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