2015-10-13 7 views
6

sto ottenendo questo erroreNil è incompatibile con tipo di ritorno 'MKOverlayRenderer'

"Nil è incompatibile con il tipo di ritorno 'MKOverlayRenderer'".

Ecco il mio codice:

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 
    } 

perché è accadendo?

risposta

1

Perché nil non è un MKOverlayRenderer. Se si prevede che una funzione possa restituire zero, il tipo restituito dovrebbe essere facoltativo. Come definito, la funzione può solo restituire l'effettivo MKOverlayRenderer.

+0

cosa dovrei usare invece di zero? –

+0

Nulla dovresti rendere opzionale la tua dichiarazione di reso e restituire nil o rendere il tuo overlay di tipo MKCircle – milo526

+0

@ milo526 mezzi opzionali? puoi spiegare brevemente? –

12

return MKPolylineRenderer() invece di restituire nil.

2

Non è necessario restituire nil per questa funzione di delegato. La vista mappa prevede un rendering per ciascuna sovrapposizione. Nel tuo caso, si dovrebbe fare questo:

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 
} 

non credo che si dovrebbe restituire MKPolylineRenderer() perché può nascondere il proprio errore.