I am trying to draw a polyline on a map in Swift 2. It all works well, but I get a compiler warning for this code:
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
let polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.strokeColor = UIColor.redColor()
polylineRenderer.lineWidth = 5
return polylineRenderer
}
return nil
}
This will give me a warning says that 'Result and parameters in mapView (rendererForOverlay) have different optionality than expected by protocol MKMapViewDelegate'
Now, this will compile fine, but it bugs me that the compiler warning is showing.
If I change the first line to
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
by removing the !, the warning will go away but I get an error that the return cannot be nil and the code will not compile anymore.
This is also a follow up to this thread where the same problem was stated but no satisfying answer is available: Swift 2 MKMapViewDelegate rendererForOverlay optionality
Can anyone shed any light on the correct way to use this function now in Swift 2?
Thanks.
Going by what autocomplete suggests the prototype looks like this:
And apparently there's nothing you can do about it, except for returning
return MKPolylineRenderer()
where normally you would return nil.To me it looks like an implementation bug, because here's what the documentation says about the returned object:
I suggest you create a case for it in Apple's bug report
Don't return nil. This is only called for overlays you create, so instead of checking if overlay is MKPolyline, check which of your overlays it is. If you have only one, return the specified polyline renderer without checking which one it is.