Центр уведомлений - Невозможно преобразовать значение типа «Селектор» в ожидаемый тип аргумента «Строка» - PullRequest
0 голосов
/ 07 февраля 2019

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

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

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

Функция получилаMsg:

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

Работа с этим руководством: https://www.hackingwithswift.com/example-code/system/how-to-post-messages-using-notificationcenter

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

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

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

  1. Доступ к экземпляру NotificationCenter с помощью NotificationCenter.default

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

Полный код должен выглядеть примерно так:

NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NC1"), object: nil)
0 голосов
/ 07 февраля 2019
NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NC1"), object: nil)

затем реализуйте

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

Keypath используется для уведомления KVO

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

может получить подробности в этой ссылке

0 голосов
/ 07 февраля 2019

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

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