通知中心 - 无法将类型 'Selector' 的值转换为预期的参数类型 'String'
Notification Center - Cannot convert value of type 'Selector' to expected argument type 'String'
我现在正在学习通知中心,在尝试注册观察者时遇到此错误:
Cannot convert value of type 'Selector' to expected argument type 'String'
我的观察者代码:
NotificationCenter.addObserver(self, forKeyPath: #selector(receivedMsg), options: Notification.Name("NC1"), context: nil)
函数收到消息:
@objc func receivedMsg() {
print("MSG Received")
}
完成本教程:https://www.hackingwithswift.com/example-code/system/how-to-post-messages-using-notificationcenter
为什么会出现此错误,我该如何解决?
(Swift 4.2)
您添加为观察员的方法有误。你想改用这个:
NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NS1"), object: nil)
您需要解决两件事:
使用 NotificationCenter.default
访问 NotificationCenter
的实例
使用NotificationCenter
上可用的addObserver
方法签名
完整的代码应该是这样的
NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NC1"), object: nil)
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 用于跟踪一般事件,例如按下按钮时 post 一个动作。
可在此link
中获取详细信息
我现在正在学习通知中心,在尝试注册观察者时遇到此错误:
Cannot convert value of type 'Selector' to expected argument type 'String'
我的观察者代码:
NotificationCenter.addObserver(self, forKeyPath: #selector(receivedMsg), options: Notification.Name("NC1"), context: nil)
函数收到消息:
@objc func receivedMsg() {
print("MSG Received")
}
完成本教程:https://www.hackingwithswift.com/example-code/system/how-to-post-messages-using-notificationcenter
为什么会出现此错误,我该如何解决? (Swift 4.2)
您添加为观察员的方法有误。你想改用这个:
NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NS1"), object: nil)
您需要解决两件事:
使用
NotificationCenter.default
访问 使用
NotificationCenter
上可用的
NotificationCenter
的实例
addObserver
方法签名
完整的代码应该是这样的
NotificationCenter.default.addObserver(self, selector: #selector(receivedMsg), name: Notification.Name("NC1"), object: nil)
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 用于跟踪一般事件,例如按下按钮时 post 一个动作。
可在此link
中获取详细信息