现在我正在使用 Swift 2.0,我该如何修复我的 MKOverlayRenderer?

How can I fix my MKOverlayRenderer now that I'm using Swift 2.0?

因此,当我使用 Swift 1.2 时,此功能运行良好并为我提供了所需的功能。

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

    if overlay is MKPolyline {
        let pr = MKPolylineRenderer(overlay: overlay)
        pr.strokeColor = self.lightBlue
        pr.lineWidth = 14
        return pr
    }
//I get the error here, because I need to return something    
}

现在,我收到一条错误消息 "Missing return in a function expected to return 'MKOverlayRenderer'"。

这个方法还是这样用的吗?我能做些什么来解决这个问题?

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

只会为您添加到 MKMapView 实例的每个叠加层调用。

如果你只在你的mapView中添加一个MKPolyline,你可以确定当这个委托函数被调用时,overlay参数的类型是MKPolyline。既然是这样,就没有理由去检查overlay参数是不是MKPolylineif overlay is MKPolyline的实例了。你可以这样做:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    let pr = MKPolylineRenderer(overlay: overlay)
    pr.strokeColor = self.lightBlue
    pr.lineWidth = 14
    return pr
}

如果您曾经向 MKMapView 添加不同类型的叠加层,您可以这样做:

if overlay is MKPolyline {
    // return renderer for MKPolyline overlay
    return mkPolylineRenderer
} else {
    // handle the different type of overlay...
    return otherTypeOfOverlayRenderer
}

Swift 编译器足够智能,可以从 if/else 块中推断出总会返回某些内容。