NotificationCenter 文档教程(SwiftUI Foundation 中文手册)

NotificationCenter

通知分派机制可将信息广播到注册的观察者。

class NotificationCenter : NSObject

总览

对象在通知中心注册,以NSNotification使用或方法接收通知(对象)。当对象将自己添加为观察者时,它指定应接收的通知。因此,对象可以多次调用此方法,以将其注册为多个不同通知的观察者。addObserver(_:selector:name:object:)addObserver(forName:object:queue:using:)

每个正在运行的应用都有一个default通知中心,您可以创建新的通知中心来组织特定上下文中的通信。

通知中心只能在单个程序中传递通知;如果要向其他进程发布通知或从其他进程接收通知,请改用。DistributedNotificationCenter


主题

获取默认通知中心

1、class var default: NotificationCenter

该应用程序的默认通知中心。

添加和删​​除通知观察者

2、func addObserver(forName: NSNotification.Name?, object: Any?, queue: OperationQueue?, using: (Notification) -> Void) -> NSObjectProtocol

将一个条目添加到通知中心,以接收传递到所提供块的通知。

3、func addObserver(Any, selector: Selector, name: NSNotification.Name?, object: Any?)

将一个条目添加到通知中心,以使用通知来调用提供的选择器。

4、func removeObserver(Any, name: NSNotification.Name?, object: Any?)

从通知中心的调度表中删除匹配的条目。

5、func removeObserver(Any)

从通知中心的分发表中删除所有指定观察者的条目。


发布通知

6、func post(Notification)

将给定的通知发布到通知中心。

7、func post(name: NSNotification.Name, object: Any?, userInfo: [AnyHashable : Any]?)

创建具有给定名称,发件人和信息的通知,并将其发布到通知中心。

8、func post(name: NSNotification.Name, object: Any?)

创建具有给定名称和发件人的通知,并将其发布到通知中心。


Publishing Notifications to Combine

9、func publisher(for: Notification.Name, object: AnyObject?) -> NotificationCenter.Publisher

返回在广播通知时发出事件的发布者。

10、struct NotificationCenter.Publisher

在广播通知时发出元素的发布者。


实战代码

  NotificationCenter.default.addObserver(forName: NSWindow.didBecomeMainNotification, object: nil, queue: nil) { (notification) in
         print("here")
            }
        }
class MsgMgr:NSObject{
    func sendNoti(msg:String){
        NotificationCenter.default.post(name: NSNotification.Name.Msg, object: msg)
    }
    
}

extension Notification.Name {
    static let Msg = Notification.Name("Msg_demo")
}

class MsgModel:ObservableObject{
    @Published var name = ""
    
    @objc func updateUI(notification: Notification) {
         //let url = notification.userInfo?[URLContainer.urlKey]
         print("")
        self.name = notification.object as! String
     }
    func addNoti(){
        NotificationCenter.default.addObserver(self,
                                               selector: #selector( self.updateUI( notification:)),
                   name: Notification.Name.Msg,
                   object: nil)
    }
}

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

你可能感兴趣的:(SwiftUI,Foundation,技术文档及手册)