2015-10-13 18 views
6

私は無記号は、戻り値の型「MKOverlayRenderer」

「無記号が 『MKOverlayRenderer』戻り値の型と互換性がありません」このエラーを取得していますとの互換性がありません。ここで

私のコードです:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 
    if overlay is MKCircle { 
     let circleRenderer = MKCircleRenderer(overlay: overlay) 
     circleRenderer.lineWidth = 1.0 
     circleRenderer.strokeColor = UIColor.purpleColor() 
     circleRenderer.fillColor = UIColor.purpleColor().colorWithAlphaComponent(0.4) 
     return circleRenderer 
    } 
     return nil 
    } 

は、なぜそれが起こっていますか?

答えて

1

nilはMKOverlayRendererではないためです。関数がnilを返すと予想される場合、戻り値の型はオプションでなければなりません。定義されているように、関数は実際のMKOverlayRendererのみを返すことができます。

+0

nilの代わりに何を使うべきですか? –

+0

return文をオプションにしてnilを返すか、MKCircleのオーバーレイを作成する必要はありません – milo526

+0

@millo526オプション?あなたは簡単に説明できますか? –

3

は、これは、ここで答えているように見える:あなたはnilを返すことが許されていません

Swift 2 MKMapViewDelegate rendererForOverlay optionality

。あなたのオーバーレイは、にレンダラーが必要です。 "return nil"をアサーションに置き換えます。

+0

これはバグだと言っていますか?右? –

12

nilを返す代わりにMKPolylineRenderer()を返します。

2

このデリゲート機能にはnilを返すことはできません。マップビューでは、各オーバーレイのレンダリングが必要です。あなたのケースでは、あなたがこれを行う必要があります。

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer 
{ 
    assert(overlay is MKCircle, "overlay must be circle") 

    let circleRenderer = MKCircleRenderer(overlay: overlay) 
    circleRenderer.lineWidth = 1.0 
    circleRenderer.strokeColor = UIColor.purpleColor() 
    circleRenderer.fillColor = UIColor.purpleColor().colorWithAlphaComponent(0.4) 
    return circleRenderer 
} 

は、私はそれがあなたのバグを隠す可能性があるので、あなたがMKPolylineRenderer()を返さなければならないとは思いません。