Центр уведомлений - Невозможно преобразовать значение типа «селектор» ожидаемого типа аргумента «Строка»

Вопрос задан: 8 месяцев назад Последняя активность: 8 месяцев назад
up 0 down

Im центры уведомления обучения прямо сейчас, и я получаю эту ошибку при попытке зарегистрировать наблюдатель: Cannot convert value of type 'Selector' to expected argument type 'String'

Мой код наблюдателя:

NotificationCenter.addObserver(self, forKeyPath: #selector(receivedMsg), options: Notification.Name("NC1"), context: nil)

Функция receivedMsg:

 @objc func receivedMsg() {
print("MSG Received")
}

Отработка этого урока: https://www.hackingwithswift.com/example-code/system/how-to-post-messages-using-notificationcenter

Почему я получаю эту ошибку и что я могу сделать, чтобы исправить это? (Swift 4.2)

3 ответа

up 0 down

Вы используете неправильный метод, чтобы добавить в качестве наблюдателя. Вы хотите использовать вместо этого: NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NS1"), object: nil)

up 0 down accepted

Вам нужно исправить две вещи:

  1. Доступ экземпляр NotificationCenter с участием NotificationCenter.default

  2. Использовать addObserver сигнатура метода доступны на NotificationCenter

Полный код должен быть что-то вроде

NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NC1"), object: nil)
up 0 down
NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NC1"), object: nil)

затем реализовать

@objc func receivedMsg() {
    print("MSG Received")
}

Ключевой путь используется для уведомления KVO

Самая большая разница между КВО и NotificationCenter является то, что КВО отслеживает определенные изменения объекта, в то время как NotificationCenter используется для отслеживания общих событий, как при нажатии кнопки на сообщение действия.

могут получить подробную информацию в этом ссылка