【问题标题】:How to pass data into swiftui view and access it如何将数据传递到swiftui视图并访问它
【发布时间】:2019-11-13 15:46:05
【问题描述】:

我试图将数据传递到 swiftui 视图中,以便在初始化时显示,但无法让它工作。

这是我的代码,它将数据传递到我的“MarkerInfoWindow.swift”视图中:

func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? {
    print("Showing marker infowindow")
    print("marker.userData: \(marker.userData)")
    let mUserData = marker.userData as? [String:String]
    print("mUserData?['name']", (mUserData?["name"]) ?? "mUserData[name] was nil")

    let mInfoWindow = UIHostingController(rootView: MarkerInfoWindow(placedata: mUserData!))

    return mInfoWindow.view
}

这是我的“MarkerInfoWindow.swift”视图的代码:

struct PlaceDataStruct {
    var name : String
    var place_id : String
}


struct MarkerInfoWindow: View {

    var placedata: [PlaceDataStruct]  

    var body: some View {

        //Here is where i keep getting errors regardless if i use this method or dot notation
        Text(placedata["name"])

    }
}

我不确定我是否错误地实现了我的 PlaceDataStruct。 有谁知道我做错了什么,以便在每次初始化视图时都能显示正确的数据?

【问题讨论】:

    标签: arrays swift swiftui swift-structs


    【解决方案1】:

    你的 MarkerInfoWindow 需要一个结构数组,但你传递的数据是一个字典,格式为 [String: String]

    您应该更新您的MarkerInfoWindow 以改为接受字典。这是一个如何做到这一点的例子。

    struct MarkerInfoWindow: View {
    
        var placedata: [String: String]  // update to be dictionary
    
        var body: some View {
    
            Text(placedata["name", default: ""]) // use correct notation for accessing dictionary
    
         }
     }
    

    如果您的意图没问题,您还可以在将数据传递给 MarkerInfoWindow 之前强制解包数据。但请注意,如果您的数据不存在,那么它将使您的应用程序崩溃。

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2020-10-08
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多