微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我无法在SwiftUI的View结构内的观察者类上收到通知?

如何解决为什么我无法在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)")
    }
}

我知道使用.publisheronReceive可以在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 举报,一经查实,本站将立刻删除。