我收到此错误
“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
}
为什么会发生?
答案 0 :(得分:14)
返回MKPolylineRenderer()而不是返回nil。
答案 1 :(得分:3)
这似乎在这里得到解答:
Swift 2 MKMapViewDelegate rendererForOverlay optionality
你不能被允许返回零。您的叠加层必须具有渲染器。用断言替换“return 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。