import UIKit
class ViewController: UIViewController {
//定义通知的名字,Notification 的“名字”不再是字符串类型,而是 Notification.Name 类型
    let myNotification = Notification.Name(rawValue:"MyNotification")
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let nc = NotificationCenter.default
        //发送通知
        nc.post(name:myNotification,
                object: nil,
                userInfo:["message":"Hello there!", "date":Date()])
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        let nc = NotificationCenter.default
        //添加通知,通知处理尽量
        nc.addObserver(forName:myNotification, object:nil, queue:nil, using:catchNotification)
        
    }
    func catchNotification(notification:Notification) -> Void {
        print("Catch notification")
        //guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。但与if语句不同的是,guard语句只会有一个代码块,不像if语句可以if else多个代码块。
        //userInfo变量的作用域是在整个方法体内
        //guard方法可以自动解包
        guard let userInfo = notification.userInfo,
            let message  = userInfo["message"] ,
            let date     = userInfo["date"]  else {
                print("No userInfo found in notification")
                return
        }
        
        //提醒框
        let alert = UIAlertController(title: "Notification!",
                                      message:"\(message) received at \(date)",
            preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
原文:http://www.cnblogs.com/lcl15/p/7573484.html