美文网首页
动态属性前缀dynamic

动态属性前缀dynamic

作者: 年轻Jiayu | 来源:发表于2016-04-27 19:02 被阅读0次

有时候我们需要在运行中动态传递一个属性的信息,就比如KVO模式下,我们为了让一个类的属性能够进行消息监听,需要做什么呢?
先来看下面一段代码

class KVODemoClass: NSObject {
    var number = 1
}
class Test: NSObject {
    var kvo: KVODemoClass
    override init() {
        kvo = KVODemoClass()
        super.init()
        kvo.addObserver(self, forKeyPath: "number", options: .New, context: nil)
    }
    
    deinit {
        kvo.removeObserver(self, forKeyPath: "number")
    }
    
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if keyPath == "number" {
            print("change")
        }
    }
}

let test = Test()
test.kvo.number = 2

这是一个非常简单的KVO实现代码,但是运行后控制台什么都没打印。说好的打印change呢?
其实回过头来想一想,Swift默认设定属性为静态的,即使继承了NSObject对象,因此如果我们想让一个属性能够得到动态监听,只要把最前面相应的类代码修改为

class KVODemoClass: NSObject {
    dynamic var number = 1
}

于是你会惊喜地发现控制台输出change了,不是么?

相关文章

  • 动态属性前缀dynamic

    有时候我们需要在运行中动态传递一个属性的信息,就比如KVO模式下,我们为了让一个类的属性能够进行消息监听,需要做什...

  • Method-Swizzling&动态添加方法&动态方法解析

    Method-Swizzling 动态添加方法 动态方法解析 @dynamic 动态运行时语言,当把属性声明为 @...

  • ios Runtime动态性分析

    Swift Runtime动态性分析 总结 纯Swift类没有动态性,但在方法、属性前添加dynamic修饰可以获...

  • OC动态特性

    OC常见的动态特性分为:动态类型(Dynamic typing),动态绑定(Dynamic binding),动态...

  • swift的动态性

    纯Swift类没有动态性,但在方法、属性前添加dynamic修饰可以获得动态性。 继承自NSObject的Swif...

  • vue基本语法

    模板语法 文本 使用{{}}进行数据绑定 原始html 属性 使用表达式 指令 指令带有v前缀的属性 参数 动态参...

  • 读李峰峰博客笔记之动态方法解析

    ** 如果我们使用关键字 @dynamic 在类的实现文件中修饰一个属性,表明我们会为这个属性动态提供存取方法,编...

  • Lecture 3: Planning by Dynamic P

    一、Introduction (一) 什么是动态规划(Dynamic Programming) Dynamic:问...

  • Dubbo提供者的禁用

    一、dynamic动态注册 dynamic服务是否动态注册,如果设为false,注册后将显示为disable状态,...

  • OC语言的动态性

    含义 OC语言的动态性主要体现在三个方面:动态类型(Dynamic typing)、动态绑定(Dynamic bi...

网友评论

      本文标题:动态属性前缀dynamic

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