2015-10-13 52 views
6

我收到此错误无与返回类型“MKOverlayRenderer”

“无与返回类型不兼容‘MKOverlayRenderer’”不兼容。

这里是我的代码:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 
    if overlay is MKCircle { 
     let circleRenderer = MKCircleRenderer(overlay: overlay) 
     circleRenderer.lineWidth = 1.0 
     circleRenderer.strokeColor = UIColor.purpleColor() 
     circleRenderer.fillColor = UIColor.purpleColor().colorWithAlphaComponent(0.4) 
     return circleRenderer 
    } 
     return nil 
    } 

为什么会发生?

回答

1

因为nil不是MKOverlayRenderer。如果你期望函数可能返回nil,那么返回类型应该是可选的。按照定义,该函数只能返回实际的MKOverlayRenderer's。

+0

我应该用什么来代替零? –

+0

没有你应该让你的return语句是可选的,并且返回零,或者使你的覆盖类型MKCircle – milo526

+0

@ milo526可选的手段?你能简单解释一下吗? –

12

返回MKPolylineRenderer()而不是返回零。

2

对于此代表功能,您不应该返回nil。地图视图期待每个叠加层的渲染。在你的情况,你应该这样做:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer 
{ 
    assert(overlay is MKCircle, "overlay must be circle") 

    let circleRenderer = MKCircleRenderer(overlay: overlay) 
    circleRenderer.lineWidth = 1.0 
    circleRenderer.strokeColor = UIColor.purpleColor() 
    circleRenderer.fillColor = UIColor.purpleColor().colorWithAlphaComponent(0.4) 
    return circleRenderer 
} 

我不认为你应该返回MKPolylineRenderer(),因为它可以隐藏自己的错误。