美文网首页
NSNotificationAndNSNotificationC

NSNotificationAndNSNotificationC

作者: joyiiu | 来源:发表于2016-04-20 17:44 被阅读7次

    KVO设计模式

    能使得一个对象的改变,使另一个对象在某个时刻执行相应的代码。

    与MVC模式中 model改变 从而关联view层,松耦合。

    被观察对象:

    let center = NSNotificationCenter.defaultCenter()

    center.postNotificationName("postMyLove", object: self, userInfo: ["boy":"hxl","girl":"yyx"])

    向center发出通知。

    另一个swift文件中  观察者:

    override func viewDidLoad() {

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "excute:", name: "postMyLove", object: nil)

    }

    func excute(nofi: NSNotification){

    let info = nofi.userInfo as! [String: String]  //  userinfo:[NSobject:Anyobject]

    print("i get the love",info["boy"]!,"love",info["girl"]!)

    }

    deinit{

    NSNotificationCenter.defaultCenter().removeObserver(self)

    }

    观察者接收到通知并执行 selector中的代码。

    简单记录一下kvo:

    模型  context上下文  在被观察的属性中addObserver 

    监测到变化后执行代码 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer){

    }

    模型

    class showKVO: NSObject{

    dynamic var name: String

    dynamic var num: Int

    init(name:String,number: Int) {

    self.name = name

    self.num = number

    }

    deinit{

    print("kvo already gone")

    }

    }

    实例 let student = showKVO(name: "yyx", number: 1)

    对两个属性增加观察者

    student.addObserver(self, forKeyPath: "num", options: .Old, context: &mycontext)

    student.addObserver(self, forKeyPath: "name", options: .New, context: &mycontext)

    监测变化:(change是指改变之后的字典 包含 options定义的值)

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) {

    if context == &mycontext{

    if let changes = change{

    print("changeTheNumber\(changes)")

    }

    }

    }

    利用button改变数值触发kvo:

    @IBAction func change(sender: AnyObject) {

    student.num = 2

    student.name = "hxl"

    print(student.num)

    }

    相关文章

      网友评论

          本文标题:NSNotificationAndNSNotificationC

          本文链接:https://www.haomeiwen.com/subject/zgozlttx.html