2015-10-13 6 views
6

Ich erhalte diesen FehlerNil ist unvereinbar mit Rückgabetyp 'MKOverlayRenderer'

"Nil mit Rückgabetyp 'MKOverlayRenderer unvereinbar ist".

Hier ist mein Code:

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 
    } 

, warum es auftritt?

Antwort

1

Weil Nil kein MKOverlayRenderer ist. Wenn Sie erwarten, dass eine Funktion NULL zurückgibt, sollte der Rückgabetyp optional sein. Wie definiert, kann die Funktion nur tatsächliche MKOverlayRenderer zurückgeben.

+0

was soll ich anstelle von null verwenden? –

+0

Nichts Sie sollten entweder Ihre Rücksendung Anweisung optional und thur zurück Nil oder machen Sie Ihre Überlagerung von Typ MKCircle – milo526

+0

@ Milo526 optionale Mittel? Kannst du kurz erklären? –

12

Rückgabe MKPolylineRenderer() anstelle von Null zurück.

2

Sie sollten nil für diese Delegatfunktion nicht zurückgeben. Die Kartenansicht erwartet ein Rendering für jede der Überlagerungen. In Ihrem Fall sollten Sie dies tun:

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 
} 

Ich glaube nicht, sollten Sie MKPolylineRenderer() zurückkehren, weil es dein Fehler verbergen kann.