子类化GMSMarker和GMSMapViewDelegate didTapMarker

Mar*_*s K 3 google-maps ios swift

我正在使用这个简单的MyMarker

class MyMarker: GMSMarker {
    var id: UInt32 = 0
}
Run Code Online (Sandbox Code Playgroud)

这样我的标记也可以包含额外的数字标记.当用户点击我的标记时,我打电话给a segue打开一个新的场景,其中的内容是动态的并且是相对于MyMarkers的绘制的id.我想做的事情如下:

  func mapView(mapView: GMSMapView, didTapMarker marker: MyMarker) -> Bool {
        some_global_variable = marker.id;
        performSegueWithIdentifier("segue", sender: nil)
        return true
    }
Run Code Online (Sandbox Code Playgroud)

问题当然是GMSMapViewDelegate期望标记是类型的 GMSMarker.

我怎样才能实现我追求的行为?

Nir*_*v D 6

您需要GMSMarker在其委托方法中键入强制转换为自定义标记,不要更改GMSMapViewDelegate方法的签名.

func mapView(mapView: GMSMapView, didTapMarker marker: GMSMarker) -> Bool {
    if let myMarker = marker as? MyMarker {
         some_global_variable = myMarker.id
         performSegueWithIdentifier("segue", sender: nil)
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)