首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

@Published变量上的@Binding会更改-但不会更新视图,除非我离开并返回屏幕

@Published是Swift语言中的一个属性包装器,用于在属性值发生变化时自动发布通知。而@Binding是Swift中的另一个属性包装器,用于在不同视图之间共享数据。

当在一个属性上使用@Published时,它会自动为该属性生成一个发布者(Publisher),并在属性值发生变化时发送通知。这使得其他订阅者(Subscribers)可以接收到这些通知并做出相应的响应。但是,仅仅使用@Binding修饰符来绑定一个@Published属性并不会自动更新视图。

要理解为什么@Binding不会直接更新视图,我们需要了解SwiftUI的工作原理。SwiftUI使用了一种称为"声明式UI"的编程模式,其中视图的状态是由数据驱动的。当数据发生变化时,SwiftUI会自动重新计算视图的布局和显示。

在这种情况下,@Binding属性用于在不同视图之间传递数据。当一个视图使用@Binding属性绑定到另一个视图的@Published属性时,它实际上是在共享同一个数据对象。当@Published属性的值发生变化时,它会通知所有订阅者,但并不会直接更新视图。

为了更新视图,我们需要在视图中使用@State属性或@ObservedObject属性来存储@Binding属性的值,并在视图中使用这些属性来显示和更新数据。当@Binding属性的值发生变化时,绑定到它的视图会自动重新计算并更新。

总结一下,@Published属性用于在属性值发生变化时发送通知,而@Binding属性用于在不同视图之间共享数据。要更新视图,我们需要在视图中使用@State或@ObservedObject属性来存储@Binding属性的值,并在视图中使用这些属性来显示和更新数据。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(云原生、后端开发):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(数据库):https://cloud.tencent.com/product/cdb
  • 腾讯云服务器(服务器运维):https://cloud.tencent.com/product/cvm
  • 腾讯云音视频解决方案(音视频、多媒体处理):https://cloud.tencent.com/solution/media
  • 腾讯云人工智能(人工智能):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(物联网):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动开发):https://cloud.tencent.com/product/mobdev
  • 腾讯云对象存储(存储):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(区块链):https://cloud.tencent.com/product/baas
  • 腾讯云虚拟专用网络(网络通信、网络安全):https://cloud.tencent.com/product/vpc
  • 腾讯云游戏多媒体引擎(游戏开发、音视频、多媒体处理):https://cloud.tencent.com/product/gme
  • 腾讯云元宇宙解决方案(元宇宙):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券