Swift 2 MKMapViewDelegate rendererForOverlay编译器警告

Chr*_*elt 6 mkmapview mkoverlay mkmapviewdelegate swift swift2

我正在尝试在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

}
Run Code Online (Sandbox Code Playgroud)

这会给我一个警告说," 结果,并在图形页面(rendererForOverlay)参数有不同的可选性比协议MKMapViewDelegate预期 "

现在,这将编译正常,但它告诉我编译器警告显示.

如果我将第一行更改为

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
Run Code Online (Sandbox Code Playgroud)

通过删除!,警告将消失,但我得到一个错误,返回不能为零,代码将不再编译.

这也是这个线程的后续,其中陈述了同样的问题,但没有令人满意的答案: Swift 2 MKMapViewDelegate rendererForOverlay optionality

任何人都可以在Swift 2中对正确使用此功能的方法有所了解吗?

谢谢.

BR4*_*FCK 19

通过什么自动完成建议原型看起来像这样:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer
Run Code Online (Sandbox Code Playgroud)

显然你无能为力,除了返回return MKPolylineRenderer()通常你会返回零.

对我来说,它看起来像一个实现错误,因为这是文档所说的关于返回对象的内容:

在地图上显示指定叠加层时要使用的渲染器.如果返回nil,则不会为指定的叠加层对象绘制内容.

我建议你在Apple的bug报告中为它创建一个案例


Mir*_*ekE 5

不要返回零.这仅用于您创建的叠加层,因此不检查叠加层是否为MKPolyline,而是检查它是哪个叠加层.如果只有一个,则返回指定的折线渲染器,而不检查它是哪一个.