现在我正在使用 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参数是不是MKPolyline
和if 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 块中推断出总会返回某些内容。
因此,当我使用 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参数是不是MKPolyline
和if 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 块中推断出总会返回某些内容。