Swift 2 MKMapViewDelegate rendererForOverlay 编译警告

标签 swift mkmapview swift2 mkoverlay mkmapviewdelegate

我正在尝试在 Swift 2 中的 map 上绘制多段线。一切正常,但我收到针对此代码的编译器警告:

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) 中的结果和参数具有与协议(protocol) MKMapViewDelegate 预期的不同的可选性

现在,这可以正常编译,但显示编译器警告让我很烦。

如果我把第一行改成

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {

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

这也是该线程的跟进,其中陈述了相同的问题但没有令人满意的答案: Swift 2 MKMapViewDelegate rendererForOverlay optionality

谁能阐明现在在 Swift 2 中使用此功能的正确方法?

谢谢。

最佳答案

根据自动完成的内容,原型(prototype)看起来像这样:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer

很明显,除了返回 return MKPolylineRenderer() 之外,您对此无能为力,而通常您会返回 nil。

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

The renderer to use when presenting the specified overlay on the map. If you return nil, no content is drawn for the specified overlay object.

我建议您在 Apple's bug report 中为其创建案例

关于Swift 2 MKMapViewDelegate rendererForOverlay 编译警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452067/

相关文章:

ios - 无法切换到容器 View 中的另一个 subview Controller

swift - 如何在 swift 中执行逻辑 XOR 运算以找出所有文本字段是空还是满?

Swift2:返回可选类型对象

ios - 如何在纵向模式下锁定 viewController

swift - SpriteKit : Add Multiple SKSpriteNodes To The Scene

swift - 所有 WatchKit 应用程序在真实设备上启动时都会崩溃 - 'warning: could not execute support code to read Objective-C class data'

ios - 无法实例化名为 MKMapView 的类

ios - 使用 MKMapView 和 MKRoute 获取方向问题

swift - 如何在 SVProgressHUD 中快速设置全屏?

ios - '-[CIContext initWithOptions :]: unrecognized selector sent to instance