我正在尝试在Swift 2中的地图上绘制折线。这一切都运行良好,但我收到编译器警告此代码:
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
}
这会给我一个警告,说' mapView(rendererForOverlay)中的结果和参数具有与协议MKMapViewDelegate '
预期不同的可选性现在,这将编译正常,但它让我觉得编译器警告正在显示。
如果我将第一行更改为
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
通过删除!,警告将消失但我得到一个错误,返回不能为零,代码将不再编译。
这也是该线程的后续行动,其中陈述了同样的问题,但没有令人满意的答案: Swift 2 MKMapViewDelegate rendererForOverlay optionality
任何人都可以在Swift 2中对正确使用此功能的方法有所了解吗?
感谢。
答案 0 :(得分:19)
通过什么自动完成建议原型看起来像这样:
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer
显然除了返回return MKPolylineRenderer()
通常你会返回零之外,你无能为力。
对我而言,它看起来像是一个实现错误,因为这里有关于返回对象的文档说明:
在地图上显示指定叠加层时使用的渲染器。 如果您返回nil ,则不会为指定的叠加层对象绘制内容。
我建议你在Apple's bug report
中为它创建一个案例答案 1 :(得分:5)
不要返回零。这仅用于您创建的叠加层,因此不检查叠加层是否为MKPolyline,而是检查它是哪个叠加层。如果只有一个,则返回指定的折线渲染器,而不检查它是哪一个。