Nil与返回类型'MKOverlayRenderer'不兼容

时间:2015-10-13 12:29:24

标签: ios swift mapkit swift2

我收到此错误

  

“Nil与返回类型”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
  }

为什么会发生?

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:3)

这似乎在这里得到解答:

Swift 2 MKMapViewDelegate rendererForOverlay optionality

你不能被允许返回零。您的叠加层必须具有渲染器。用断言替换“r​​eturn nil”。

答案 2 :(得分: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(),因为它可能会隐藏您的错误。

答案 3 :(得分:1)

因为nil不是MKOverlayRenderer。如果您希望函数可能返回nil,则返回类型应该是可选的。根据定义,该函数只能返回实际的MKOverlayRenderer。