2015-10-13 2 views
6

Я получаю эту ошибкуNil несовместим с типом возвращаемого значения «MKOverlayRenderer»

«Nil несовместима с возвращаемым типом" 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. Если вы ожидаете, что функция может вернуть нуль, тогда тип возврата должен быть необязательным. Как определено, функция может возвращать только фактические MKOverlayRenderer.

+0

Что я должен использовать вместо нуля? –

+0

Ничего не нужно делать, чтобы ваше заявление о возврате было опциональным и возвращало нуль или сделало ваше наложение типа MKCircle – milo526

+0

@ milo526 опционально означает? можете ли вы кратко объяснить? –

3

Это, кажется, ответил здесь:

Swift 2 MKMapViewDelegate rendererForOverlay optionality

Вы просто не имеет права возвращать ноль. На вашем наложении должно быть есть средство визуализации. Замените «return nil» на утверждение.

+0

, чтобы вы говорят, что это ошибка? правильно? –

12

вернуть 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(), потому что это может скрыть вашу ошибку.

Смежные вопросы