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

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

jingang0211 回答:如何将数据传递到swiftui视图并访问它

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之前,您还必须对数据进行解包。但是请注意,如果您的数据不存在,则会使您的应用程序崩溃。

本文链接:https://www.f2er.com/3108705.html

大家都在问