2015-09-08 18 views
6

Sto cercando di disegnare una polilinea su una mappa a Swift 2. Tutto funziona bene, ma ho un avviso del compilatore per questo codice:Swift 2 MKMapViewDelegate rendererForOverlay avviso del compilatore

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { 

    if overlay is MKPolyline { 

     let polylineRenderer = MKPolylineRenderer(overlay: overlay) 

     polylineRenderer.strokeColor = UIColor.redColor() 

     polylineRenderer.lineWidth = 5 

     return polylineRenderer 
    } 

    return nil 

} 

Questo mi darà un avvertimento dice che 'Risultato e parametri in MapView (rendererForOverlay) hanno diverse opzionalità di quanto previsto dal protocollo di MKMapViewDelegate'

Ora, questo compilerà bene, ma mi bug che l'avviso del compilatore è che mostra.

Se cambio la prima linea a

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 

rimuovendo il!, L'avviso andrà via ma ottengo un errore che il ritorno non può essere pari a zero e il codice non viene compilato più.

Questo è anche un follow-up a questo thread in cui è stato dichiarato lo stesso problema ma nessuna risposta soddisfacente è disponibile: Swift 2 MKMapViewDelegate rendererForOverlay optionality

Qualcuno può far luce sul modo corretto di utilizzare questa funzione ora a Swift 2?

Grazie.

risposta

17

Andando da ciò completamento automatico suggerisce il prototipo si presenta così:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer 

E a quanto pare non c'è nulla che si possa fare al riguardo, tranne che per il ritorno return MKPolylineRenderer() dove normalmente si dovrebbe restituire nil.

A me sembra un bug di implementazione, perché qui è quello che dice la documentazione circa l'oggetto restituito:

Il renderer da utilizzare in sede di presentazione della sovrapposizione specificata sulla mappa. Se si restituisce nil, non viene disegnato alcun contenuto per l'oggetto overlay specificato.

Vi suggerisco di creare un caso per esso in Apple's bug report

+1

Grazie per questo. Ciò mantiene il codice funzionante e si sbarazza degli avvertimenti. –

+0

return nil mi dà errore. quindi aiutami –

5

Non restituire nil. Questo è richiesto solo per le sovrapposizioni create, quindi, invece di controllare se l'overlay è MKPolyline, controlla quale delle tue sovrapposizioni è. Se ne hai uno solo, restituisci il renderizzatore polilinea specificato senza verificare quale sia.