如何将数据传递到 swiftui 视图并访问它

How to pass data into swiftui view and access it

我正在尝试将数据传递到 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。 有谁知道我做错了什么,以便每次初始化视图时都能显示正确的数据?

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 之前,如果您的意图是正确的,您还可以强制解包数据。但请注意,如果您的数据不存在,那么它会使您的应用程序崩溃。