
看到UIViewController
新增了updateProperties()
方法,看起来是改变属性值就会刷新页面,要方便不少。
试试看,写了个UIButton+UILabel+Model
,点击时修改model
的name
和age
,看看会不会自动调用updateProperties()
,代码如下:
swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var button: UIButton?
@IBOutlet weak var label: UILabel?
class Model {
var name: String = ""
var age: Int = 0
}
let model: Model = Model()
@IBAction func touchUpInside(_ sender: Any) {
model.name = String(UUID().uuidString.prefix(5))
model.age = .random(in: 0...1000)
}
override func updateProperties() {
super.updateProperties()
label?.text = "name: \(model.name)\nage: \(model.age)"
}
}
运行了一下,发现viewDidLoad
之后确实会自动调用一次updateProperties
可是,点击button
完全没有变化。。。。。。
偶然发现另一个关键是@Observable
,把Model
改一改,在运行,点击button
有效果了!
swift
@Observable class Model {
var name: String = ""
var age: Int = 0
}

原来@Observable
是个宏,点击宏展开会发现很多东西,应该就是和kvo类似的吧