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

SwiftUI中未使用Binding时MapView的annotations为何随locations自动更新

原理说明

这个现象是SwiftUI的标准视图更新机制导致的,和数组是否为值类型、是否使用Binding没有直接关系:

  • ContentView中的locations被@State修饰,只要locations的值发生变更(你调用append时,值类型的数组会生成新的实例赋值给locations),就会触发ContentView的body重新计算渲染。
  • 重渲染body时会重新初始化MapView结构体,把最新的locations值传入赋值给MapView的annotations属性。
  • 只要UIViewRepresentable类型的任意存储属性发生变化,SwiftUI就会自动调用它的updateUIView方法。你在该方法中判断了annotations和地图当前标注的数量差异,执行了移除旧标注、添加新标注的逻辑,最终体现为地图标注自动跟随locations更新。

常见误区说明

@Binding的核心作用是让子视图可以反向修改父视图的状态值,如果你只需要子视图拿到父视图状态的最新值,直接传值即可,不需要使用@Binding:父视图状态变更触发重渲染时,子视图自然会拿到最新的参数值。你当前的场景不需要在MapView中修改标注数组,所以完全不需要给annotations加@Binding修饰。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:09:02