在 forEach 循环中检测标记上的点击并打印

Detecting a tap on a marker in a forEach Loop and print

要检测对 GoogleMaps 上标记的点击,我应该使用此功能。

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    print("Do what ever you want.")
    return true
}

效果很好。但是我动态显示兴趣点。如何打印被按下的兴趣点的标题?

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
    ...
    POIManager.testVariable.forEach {
       let marker1 = GMSMarker()
       marker1.position = CLLocationCoordinate2D(latitude: [=11=].geometry.location.lat, longitude: [=11=].geometry.location.lng)
       marker1.title = [=11=].name
       marker1.map = mapView
       locationManager.stopUpdatingLocation()
    }
    ...
}

我这样试过,但是不行。我想将这两个函数合二为一是一个逻辑错误,因为 bool 应该是真的?

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition, didTap marker: GMSMarker) -> Bool {
   ...
    POIManager.testVariable.forEach {
       let marker1 = GMSMarker()
       marker1.position = CLLocationCoordinate2D(latitude: [=12=].geometry.location.lat, longitude: [=12=].geometry.location.lng)
       marker1.title = [=12=].name
       print([=12=].name)
       marker1.map = mapView
       locationManager.stopUpdatingLocation()
    }
    ...
    return true
}

您应该考虑利用 GMSMarker userInfo 属性。你用一个字典来分配它,可能包含一个容易引用的 属性 (id),你可以查询它来获取你的数据。

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    let data = marker.userData as? [String:String]
    print(data?["id"]) // get your array object with this id
    return true
}

我用这个解决了。

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    print(marker.title)
    return true
}