如何访问存储在 marker.userData 和 Swift 中的 Google 地图标记数据
How to access Google Maps marker data stored in marker.userData in Swift
我目前正在尝试使用 marker.userData 属性.
在 Google 地图 markerInfoWindow 中动态显示有关其特定位置的数据
这是我设置 marker.userData 并在我的地图实例上放置标记的函数:
func putPlaces(places: [Place]) {
for place in places.prefix(10) {
print("*******NEW PLACE********")
let name = place.name
let address = place.address
let location = ("lat: \(place.geometry.location.latitude), lng: \(place.geometry.location.longitude)")
let locLat = place.geometry.location.latitude
let locLon = place.geometry.location.longitude
let place_id = place.place_id
let photo = place.photos
let types = place.types
let marker : GMSMarker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: locLat, longitude: locLon)
marker.icon = GMSMarker.markerImage(with: .black)
print("PLACE: \(place)")
print("PLACE.NAME: \(place.name)")
marker.userData = ["name" : "names"]
marker.map = self.mapView
}
}
这里可以看到具体的place.name打印^^^
这是我的函数(从 GoogleMapsAPI 文档中复制),我试图在其中访问 marker.userData:
中的数据元素
func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? {
print("Showing marker infowindow")
print("marker.userData: \(marker.userData)")
// error here!vvv
// print("marker.userData.name: \(marker.userData.name)")
// here I will pass this data to a swiftUI view that will display the data within marker.userData
let mInfoWindow = UIHostingController(rootView: MarkerInfoWindow())
mInfoWindow.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width - 48, height: 80)
return mInfoWindow.view
}
这是我存储在 marker.userData 中的数据(打印 marker.userData 时从控制台获取):
Optional(GMapProj.Place(geometry: GMapProj.Place.Location(location: GMapProj.Place.Location.LatLong(latitude: 42.3405476, longitude: -71.1465262)), name: "Boston Management Office", place_id: "ChIJpYqcF01444kRO8JeAqK2NuE", openingHours: Optional(GMapProj.Place.OpenNow(isOpen: false)), photos: nil, types: ["real_estate_agency", "point_of_interest", "establishment"], address: "113 Kilsyth Road # B, Brighton"))
在上面的最后一个函数中,我尝试打印出 marker.userData 中的 'name' 元素,但我一直收到错误提示“'Any?' 类型的值没有成员 'name'。但是在我将数据放入 marker.userData...
之前,我可以在打印时访问名称
有人知道我如何访问存储在 marker.userData 中的数据并读取它的元素吗??
marker.userData
类型是 Any?。您不能在 Any 类型的对象上使用点语法。您需要将 marker.userData
类型转换为字典,然后访问该值。像这样。
let userData = marker.userData as? [String:String]
print("marker.userData.name": \(userData["name"])
我目前正在尝试使用 marker.userData 属性.
在 Google 地图 markerInfoWindow 中动态显示有关其特定位置的数据这是我设置 marker.userData 并在我的地图实例上放置标记的函数:
func putPlaces(places: [Place]) {
for place in places.prefix(10) {
print("*******NEW PLACE********")
let name = place.name
let address = place.address
let location = ("lat: \(place.geometry.location.latitude), lng: \(place.geometry.location.longitude)")
let locLat = place.geometry.location.latitude
let locLon = place.geometry.location.longitude
let place_id = place.place_id
let photo = place.photos
let types = place.types
let marker : GMSMarker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: locLat, longitude: locLon)
marker.icon = GMSMarker.markerImage(with: .black)
print("PLACE: \(place)")
print("PLACE.NAME: \(place.name)")
marker.userData = ["name" : "names"]
marker.map = self.mapView
}
}
这里可以看到具体的place.name打印^^^
这是我的函数(从 GoogleMapsAPI 文档中复制),我试图在其中访问 marker.userData:
中的数据元素 func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? {
print("Showing marker infowindow")
print("marker.userData: \(marker.userData)")
// error here!vvv
// print("marker.userData.name: \(marker.userData.name)")
// here I will pass this data to a swiftUI view that will display the data within marker.userData
let mInfoWindow = UIHostingController(rootView: MarkerInfoWindow())
mInfoWindow.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width - 48, height: 80)
return mInfoWindow.view
}
这是我存储在 marker.userData 中的数据(打印 marker.userData 时从控制台获取):
Optional(GMapProj.Place(geometry: GMapProj.Place.Location(location: GMapProj.Place.Location.LatLong(latitude: 42.3405476, longitude: -71.1465262)), name: "Boston Management Office", place_id: "ChIJpYqcF01444kRO8JeAqK2NuE", openingHours: Optional(GMapProj.Place.OpenNow(isOpen: false)), photos: nil, types: ["real_estate_agency", "point_of_interest", "establishment"], address: "113 Kilsyth Road # B, Brighton"))
在上面的最后一个函数中,我尝试打印出 marker.userData 中的 'name' 元素,但我一直收到错误提示“'Any?' 类型的值没有成员 'name'。但是在我将数据放入 marker.userData...
之前,我可以在打印时访问名称有人知道我如何访问存储在 marker.userData 中的数据并读取它的元素吗??
marker.userData
类型是 Any?。您不能在 Any 类型的对象上使用点语法。您需要将 marker.userData
类型转换为字典,然后访问该值。像这样。
let userData = marker.userData as? [String:String]
print("marker.userData.name": \(userData["name"])