7

在 Swift 1.2 我有这个:

class UVC: NSViewController, MKMapViewDelegate {
    // ...

    // **************************************
    // MARK: MapView Delegate
    // **************************************
    func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer! {
        if overlay is OSGBTiles {
            return OSGBTilesRenderer(tileOverlay: overlay as! OSGBTiles)
        } else if overlay is ESRI {
            return ESRIRenderer(shapeFileOverlay: overlay as! ESRI)
        } else if overlay is MKTileOverlay {
            return MKTileOverlayRenderer(overlay: overlay)
        } else {
            print("Unknown overlay")
        }
        return nil
    }
}

Swift 2 已将定义更改 mapView:rendererForOverlay为 now returnMKOverlayRenderer而不是MKOverlayRenderer!,并且现在不允许我返回nil(不出所料) as MKOverlayRendereris not NilLiteralConvertible。但是,文档(在 Xcode 7 中)仍然说:

返回值

在地图上呈现指定叠加层时使用的渲染器。如果返回 nil,则不会为指定的叠加对象绘制任何内容。

如果通过了我不认识的覆盖,我应该返回什么?

4

1 回答 1

2

根据最新的 MKMapView.h,新的函数声明现在是:

// Current renderer for overlay; returns nil if the overlay is not shown.
@available(iOS 7.0, *)
func rendererForOverlay(overlay: MKOverlay) -> MKOverlayRenderer?
于 2015-06-27T06:57:42.147 回答