iOS开发之KVO(swift版)
2019-07-09 本文已影响7人
chasitu
最近比较有时间,所以在用swift写我们公司的项目,顺便加深学习swift,今天记录一下KVO吧,因为我感觉写swift的时候使用KVO没有像objective-c那么简单,稍微有点绕,
问题:需要监听UITextField的text属性
- 我们objective-c的思路是这样的
TextField.addObserver(self,
forKeyPath: "text",
options: [.new,.old],
context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "text" {
textChanged?()
}
}
- 我们这样写之后回调方法是不调用的,需要继承UITextField写一个自定义类,重写set和get方法
import UIKit
class SHLoginUserNameTextView: UITextField {
override var text: String!{
set {
super.text = newValue
}
get {
return super.text
}
}
}
- 需要监听系统类的时候先继承然后重写需要监听的属性就可以
- 如果是我们自定义的类添加的属性需要添加dynamic修饰,当前类用@objcMembers修饰,需要监听的类和属性都添加修饰
到下班点了,就不多细说了