Swift NotificationCenter使用

首先来看一下 API:

/****************	Notification Center	****************/
open class NotificationCenter : NSObject {

    // default 一个类属性,是获取NotificationCenter的
    open class var `default`: NotificationCenter { get }

    /*
    添加观察者的方法。
    observer: 给通知中心添加的观察者是谁,一般是 self
    selector:响应的方法,就是接收到通知之后做的响应。
    name: 观察的对象。可以是系统已经给好的观察者属性,比如 textView 是否在编辑,键盘是否弹出的。也可以是自己定义的 NSNotification
  
    */
    open func addObserver(_ observer: Any, selector aSelector: Selector, name aName: NSNotification.Name?, object anObject: Any?)

    // 发布消息
    open func post(_ notification: Notification)
    // 发布消息
    open func post(name aName: NSNotification.Name, object anObject: Any?)
    // 发布消息,携带信息userInfo
    open func post(name aName: NSNotification.Name, object anObject: Any?, userInfo aUserInfo: [AnyHashable : Any]? = nil)

    // 移除观察者
    open func removeObserver(_ observer: Any)
    // 移除观察者
    open func removeObserver(_ observer: Any, name aName: NSNotification.Name?, object anObject: Any?)

    
    @available(iOS 4.0, *)
    open func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Swift.Void) -> NSObjectProtocol
}
复制代码

// 获取NotificationCenter

let center = NotificationCenter.default
复制代码

三种使用方式: 1.使用系统存在的观察 name, 示例 textView 改变的时候

	NotificationCenter.default.addObserver(self, selector: #selector(changeTextView), name: NSNotification.Name.UITextViewTextDidChange, object: nil)
复制代码

当 textView 改变的时候就发出通知,此时不需要调用 post 方法。直接就会响应 selector 方法:

	func changeTextView() {
		// 当 textView 改变的时候做出响应
		print("textView 改变")
	}
复制代码

2.使用自己定义的观察 name ,示例:name 为 shake 的NSNotification

NotificationCenter.default.addObserver(self, selector: #selector(change), name: NSNotification.Name(rawValue: "shake"), object: nil)
复制代码

这是就要根据需求发布通知了。 // 发布通知

@IBAction func click(_ sender: UIButton) {
		
		NotificationCenter.default.post(name: NSNotification.Name(rawValue: "shake"), object: self)
		
	}
	
复制代码

// 作出响应

	func change() {
		
		print("wocao")
		
	}
	
复制代码

3.携带信息,可用于传递数据

		NotificationCenter.default.addObserver(self, selector: #selector(me), name: NSNotification.Name(rawValue:"me"), object: nil)
复制代码

发布有数据的消息,如果用于传递数据的话,这个方法就放在传值的界面:

@IBAction func click(_ sender: UIButton) {
		
		NotificationCenter.default.post(name: NSNotification.Name(rawValue:"me"), object: self, userInfo: ["y" : "杨泓毅"])
		
	}
复制代码

作出相应,获取发布的数据,放在接受值得界面:

	func me(noti: Notification) {
		
        let titles = noti.userInfo
		self.navigationItem.title = titles?["y"] as? String
	}
复制代码

最后别忘记移除观察者:

1.NotificationCenter.default.removeObserver(self)
2.NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue:"shake"), object: nil)
3.NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue:"me"), object: nil)
复制代码

Demo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值