Swift 2 MKMapViewDelegate rendererForOverlay 可选性
Posted
技术标签:
【中文标题】Swift 2 MKMapViewDelegate rendererForOverlay 可选性【英文标题】:Swift 2 MKMapViewDelegate rendererForOverlay optionality 【发布时间】:2015-06-10 08:04:14 【问题描述】:在 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 中)仍然说:
返回值
呈现指定叠加层时使用的渲染器 在地图上。如果返回 nil,则不为指定的内容绘制任何内容 覆盖对象。
如果通过了我不认识的叠加层,我应该返回什么?
【问题讨论】:
【参考方案1】:根据最新的MKMapView.h,新的函数声明现在是:
// Current renderer for overlay; returns nil if the overlay is not shown.
@available(ios 7.0, *)
func rendererForOverlay(overlay: MKOverlay) -> MKOverlayRenderer?
【讨论】:
不确定你说的是哪个功能。我说的是协议函数func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer!
哦,对不起,我的错误。有趣的是,即使是 ObjC 版本也指定了非空返回。我正在继续寻找这个问题的答案......
其实我刚刚提交了错误 #21581742。
这是 Bug ID# 21581742 的后续。工程部门已根据以下信息确定此问题的行为符合预期:将传递给此的唯一覆盖将是您的覆盖'已添加;没有“无法识别的覆盖”之类的东西。如果开发人员添加了叠加层,则必须提供渲染器——这就是 API 的工作方式。我们认为这个问题已经结束。如果您对此问题有任何疑问或疑虑,请直接更新您的报告 (bugreport.apple.com)。
感谢您研究这个@MarkKnopper!以上是关于Swift 2 MKMapViewDelegate rendererForOverlay 可选性的主要内容,如果未能解决你的问题,请参考以下文章