如何解决为什么我无法在SwiftUI的View结构内的观察者类上收到通知?
我有以下代码,在其中创建一个类,充当默认通知的观察者。但是通知永远不会到达:
struct NotificationCenterExampleView: View {
let observerA = ObserverClassA()
init() {
print("NotificationCenterExampleView init")
NotificationCenter.default.addobserver(observerA,selector: #selector(ObserverClassA.receivednotification(notification:)),name: Notification.Name("CustomNotification"),object: "This is the message")
let notificationToPost = Notification(name: Notification.Name("CustomNotification"),object: "Message being sent",userInfo: nil)
NotificationCenter.default.post(notificationToPost)
}
var body: some View {
Text("Notification Center Example")
.frame(minWidth: 250,maxWidth: 500,minHeight: 250,maxHeight: 500)
}
}
class ObserverClassA: NSObject {
@objc func receivednotification(notification: Notification) {
let message = notification.object as! String
print("Message received: \(message)")
}
}
我知道使用.publisher
和onReceive
可以在View结构中使用,但是该代码不起作用的真正原因是什么?
解决方法
通知是按对象匹配的,因此,如果您按一个对象进行订阅而又与另一个对象进行发布,则不会触发订阅者。
此处是固定变体。经过Xcode 12.1的测试。
NotificationCenter.default.addObserver(observerA,selector: #selector(ObserverClassA.receivedNotification(notification:)),name: Notification.Name("CustomNotification"),object: nil) // << subscribe for all
let notificationToPost = Notification(name: Notification.Name("CustomNotification"),object: "This is the message",userInfo: nil)
NotificationCenter.default.post(notificationToPost)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。