ios - @Published ObservableObject 不更新 SwiftUI View

标签 ios swiftui uiviewrepresentable

我正在开发 SwiftUI 并使用 UIViewRepresentable 显示 MapView。 现在,当加载 map 时,我正在计算两点之间的路线,并将该路线存储在模型中。

class MapInfo: ObservableObject {
    @Published var routeArray: [RouteArray] = []
}

我正在调用 UIViewRepresentable MapCoordinator 中的calculateRoute()函数

struct MapView: UIViewRepresentable {
  @StateObject var mapInfo = MapInfo()
}

func requestRoute() {
    // when response is received 
    parentView.mapView.mapInfo.routeArray = responseArray
}

但我的问题是更新 MapInfo @Published RouteArray 时未调用 SwiftUI View onReceive。

我已经添加了我的代码。

struct MapContainerView: View {
      @ObservedObject var mapInfoObj = MapInfo()
      
      var body: some View {
          ZStack {
             MapView()
          }.onReceive(mapInfoObj.$routeArray) { updatedRouteArray in
             print(updatedRouteArray)
          }
      }

}

对此的任何帮助都将受到高度赞赏。 谢谢:)

最佳答案

正如 @Paulw11 在评论中提到的,您正在使用 MapInfo 的不同实例,这意味着更新一个实例不会更新另一个实例,因为它们是不同的。

要解决此问题,您只需在 MapContainerView 中创建一个 MapInfo 实例,然后将其传递到您的 MapContainerView View ,这样两个 View 可以共享相同的数据并在数据更改时更新。

您的代码如下所示:

1。 map View

struct MapView: UIViewRepresentable {
  @ObservedObject var mapInfo: MapInfo
}

func requestRoute() {
    // when response is received 
    parentView.mapView.mapInfo.routeArray = responseArray
}

2。 map 容器 View

struct MapContainerView: View {
      @StateObject var mapInfoObj = MapInfo()
      
      var body: some View {
          ZStack {
             // Here now, the two views are sharing the same data
             MapView(mapInfo: mapInfoObj)
          }.onReceive(mapInfoObj.$routeArray) { updatedRouteArray in
             print(updatedRouteArray)
          }
      }

}

关于ios - @Published ObservableObject 不更新 SwiftUI View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68739056/

相关文章:

SwiftUI:基于@Published 变量对列表进行排序

swift - SwiftUI-UITextField中的状态更改导致frameWidth不受控制地增长,并且忽略了边界/框架

ios - 如何在包装器 Swift View 中使用自定义 UIView 的扩展功能?

ios - NSJSONSerialization - 与 JSON 的核心数据关系

ios - UISearchBar 着色在 iOS7 上不一致

ios - 如何在获取通讯录Iphone时知道自己的联系人

iphone - UITableView 披露指标发疯

swift - 期望 SwiftUI DynamicProperty 属性包装器的内部更新来触发 View 更新是否正确?

ios - 是否可以缩小 SwiftUI 网格周围的空间?

swift - 如何添加 onCommit、isEditing 以及自定义绑定(bind)到自定义 TextView 的能力?