iOS 26 又有新的属性监听方法啦?

看到UIViewController新增了updateProperties()方法,看起来是改变属性值就会刷新页面,要方便不少。

试试看,写了个UIButton+UILabel+Model,点击时修改modelnameage,看看会不会自动调用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类似的吧

相关推荐
Engandend5 小时前
Flutter与iOS混合开发交互
flutter·ios·程序员
山水域7 小时前
GoogleAdsOnDeviceConversion 库的作用与用法
ios
Lucifer晓8 小时前
记录一次Flutter项目上传App Store Connect出现“Validation failed”错误的问题
flutter·ios
扶我起来还能学_9 小时前
uniapp Android&iOS 定位权限检查
android·javascript·ios·前端框架·uni-app
杂雾无尘11 小时前
SwiftUI 新手必读:如何用纯 SwiftUI 在应用中实现分段控制?
ios·swift·apple
Daniel_Coder13 小时前
iOS Widget 开发-5:Widget 与主 App 的通信原理:App Group、UserDefaults 与文件共享
ios·swift·widget
HX43614 小时前
MP - Realm (not just realm)
android·ios·全栈
YungFan1 天前
iOS26适配指南之UINavigationController
ios·swift
木叶丸1 天前
Flutter 生命周期完全指南
android·flutter·ios
Keya1 天前
解决 pod install 警告信息显示不完全的方法
ios·xcode·cocoapods