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

SwiftUI中无关View因TimerPublisher更新重绘问题咨询

SwiftUI无关视图因属性更新重绘的疑问

Xcode版本:15.2 (15C500b)

根据Apple WWDC关于View“标识”的内容,我的预期是:当SwiftUI View中的一个属性变化时,不应导致另一个无关View的绘制更新。

问题: 修改一个属性(TimerPublisher)的值时,确实会引发无关View的刷新。

示例中,Timer每秒触发一次,更新Date,对应的Text视图更新符合预期。但第二个Text视图也发生了变化——给它添加随机颜色的background后,“Hello, World”的背景色每秒都会变化。

struct TestView: View {

    @State private var date = Date.now
    @State private var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    
    var body: some View {
    
        VStack {
            Text(date.formatted())
                .onReceive(timer) { newDate in
                    date = newDate
                }
            
            Text("Hello, World")
                .background(Color.random) // 当timer发布消息时,这里会变化!
        }
    }
}

extension Color {
    static var random: Color {
        return Color(
            red: .random(in: 0...1),
            green: .random(in: 0...1),
            blue: .random(in: 0...1)
        )
    }
}

#Preview {
    TestView()
}

截图示例

这是预期行为吗?我的假设是否有误,或是遗漏了某些要点?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:03:25