You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SwiftUI View感知ViewModel计算属性的变化?

让SwiftUI视图响应ViewModel计算属性的变化

要让ContentView能实时反映compProp的变化,有两种简洁的实现方式:


方式一:手动发送更新通知

ObservableObject协议自带objectWillChange发布者,在修改计算属性的依赖值后,手动发送信号就能触发视图更新。修改后的ViewModel代码如下:

import Foundation

class ViewModel: ObservableObject {
    private var val = 42
    
    var compProp: Int {
        return val
    }

    func maybeChange() {
        if Int.random(in: 0..<2) == 1 {
            val += 1
            objectWillChange.send() // 通知视图属性即将更新
        }
    }
}

当val变化后,调用objectWillChange.send()会让所有绑定该ViewModel的视图(比如用@StateObject关联的ContentView)重新计算body,从而读取到compProp的最新值。


方式二:利用@Published自动触发通知

如果计算属性的依赖值可以标记为@Published,就能省去手动发送通知的步骤。给私有变量val加上@Published修饰符,它的变化会自动触发ViewModel的更新通知:

import Foundation

class ViewModel: ObservableObject {
    @Published private var val = 42
    
    var compProp: Int {
        return val
    }

    func maybeChange() {
        if Int.random(in: 0..<2) == 1 {
            val += 1
            // @Published会自动发送更新信号,无需额外代码
        }
    }
}

这种方式更简洁,适合计算属性仅依赖单个@Published变量的场景。当val被修改时,@Published会自动通知视图重新渲染,此时compProp会返回最新的val值。


内容的提问来源于stack exchange,提问作者eggor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:31:00