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

6

我收到了这个错误:

"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个回答

15

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


我在这里的建议中做了一个混合体; NSAssert([myOverlay isKindOfClass:[MyOverlay class], @"some message about %@", myOverlay); return [[MKPolylineRenderer alloc] initWithOverlay:myOverlay]; 这是最好的两个世界,捕捉我的错误,但抑制XCode警告,关于不返回正确类型的东西。 - RobP

3

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(),因为它可能会隐藏你的错误。

1
因为nil不是MKOverlayRenderer类型。如果你预计一个函数可能会返回nil,那么返回类型应该是可选类型。按照定义,这个函数只能返回实际的MKOverlayRenderer类型。

@milo526 可选参数是什么意思?你能简要解释一下吗? - Ganesh Kumar
1
可选值是可以为nil或特定类型的值。声明可选值时,应在类型声明中添加“?”符号。“let myString:String?”声明了一个类型为“String”的变量,该变量可以是字符串或nil。 - milo526
@milo526:这是MKMapView的委托方法,因此将返回值更改为可选项是不可行的。在这种情况下,第二个选项是最好的。 - Midhun MP
@Mithun MP 当我使用字符串可选项时,我遇到了这个错误。**无法将返回类型为'String'的返回表达式转换为返回类型'MKOverlayRenderer'**。 - Ganesh Kumar
1
你让我解释什么是可选项。字符串可选项只是一个例子,在你的情况下,你应该使用MKOverlayRenderer可选项,因此使用MKOverlayRenderer? - milo526
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接