继承自NSObject类的内存结构
可以看到只有8个字节了,里面是一个指针,学过OC的应该知道这就是isa指针,指向的是类对象地址,然后里面有superClass指定和isa里面的isa指向元类对象,这都是OC的内容了就不赘述了这三种协议都只能被类遵守,其中第三种是可以给OC类使用的
OC可用的协议
protocol protocol1: AnyObject {}
protocol protocol2: class {}
@objc protocol protocol3 {}
这三种协议都是只能被类继承,其中protocol3可以给OC使用
KVC/KVO
要想在Swift的类里面使类能设置监听则需要用 @objc dynamic这个关键字来修饰,当然需要OC的东西一般都需要继承NSObject这里不赘述
let COUNTKEYPATH = "count"
class Production:NSObject
{
@objc dynamic var count:Int = 100
override init() {
super.init()
self.addObserver(self, forKeyPath: COUNTKEYPATH, options: .new, context: nil)
}
deinit {
self.removeObserver(self, forKeyPath: COUNTKEYPATH)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("123")
}
}
var p = Production()
p.count = 20
p.setValue(90, forKey: COUNTKEYPATH)
这样就可以实现KVO了,监听者也可以自定义,我这就图省事,KVC也可以正常使用