Swift 2 MKMapViewDelegate rendererForOverlay 可选性

标签 swift mkmapviewdelegate

在 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 的定义更改为现在返回 MKOverlayRenderer 而不是 MKOverlayRenderer!,并且现在不允许我返回返回 nil(毫不奇怪)因为 MKOverlayRenderer 不是 NilLiteralConvertible。但是,文档(在 Xcode 7 中)仍然说:

Return Value

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.

如果传递了一个我不认识的叠加层,我应该返回什么?

最佳答案

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

// Current renderer for overlay; returns nil if the overlay is not shown.
@available(iOS 7.0, *)
func rendererForOverlay(overlay: MKOverlay) -> MKOverlayRenderer?

关于Swift 2 MKMapViewDelegate rendererForOverlay 可选性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30750560/

相关文章:

ios - 在这种情况下,mapView :viewForAnnotation: will be called?

ios - Swift WKWebView 在 didFailProvisionalNavigation 上崩溃

ios - swift 3.0 的 map View 注释委托(delegate)

iphone - Mapview 上注释图像的平滑移动

swift - MKMap 我无法在我的 map View swift 4 中打开 URL

swift - MapView 用户的当前位置常规 Pin

ios - 由于层次结构,无法显示由 MFMailComposeViewController 创建的页面 - Swift 4

ios - swift,如何从 UIImageView 获取当前显示的图像文件名

swift - 'Bool' 不可转换为 '() throws -> Bool'

ios - 在复杂的 View 层次结构中查找 CGRect