2015-09-08 36 views
6

Ben Swift 2. Her iyi çalışıyor bir harita üzerinde bir poligon çizmenizi çalışıyorum ama bu kodu için bir derleyici uyarı alıyorum: Bu bana verecekSwift 2 MKMapViewDelegate rendererForOverlay derleyici uyarısı

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 

} 

uyarı Şimdi, bu ince derlemek olacak

'Sonucu ve MapView (rendererForOverlay) parametreler protokol MKMapViewDelegate tarafından beklenenden daha farklı opsiyonel olma var' diyor, ama bu beni rahatsız ediyor derleyici uyarısı gösteriyor söyledi. Ben kaldırarak!

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

ilk satırı değiştirirseniz

, uyarı gidecektir ama dönüş nil olamaz ve kod artık derlemek olmaz bir hata alıyorum.

Bu aynı zamanda bir aynı sorunu ifade edilmiştir bu konuya takip ama hiçbir tatmin edici cevap mevcuttur: Swift 2 MKMapViewDelegate rendererForOverlay optionality

kimse Swift 2'de şimdi bu işlevi kullanmak için doğru yolda aydınlatabilir?

Teşekkürler.

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

Ve görünüşe göre normalde nil dönecekti return MKPolylineRenderer() iadesi dışında, bu konuda yapabileceğiniz bir şey yok: otomatik tamamlama prototip anlaşılacağı tarafından giderek

cevap

17

buna benzer. Harita üzerinde belirlenen bindirme sunarken

oluşturucu kullanmak: Burada belgeler iade nesne hakkında ne diyor çünkü

Bana öyle bir uygulama hata gibi görünüyor. Nil döndürürseniz, belirtilen kaplama nesnesi için içerik çizilmez.

Sana nil iade etmeyin Apple's bug report

+1

Bunun için teşekkürler. Bu, kodu çalışır halde tutar ve uyarılardan kurtulur. –

+0

dönüş nil hata veriyor. bana yardım et –

5

bunun için bir durumda oluşturmak öneririz. Bu, yalnızca oluşturduğunuz bindirmeler için çağrılır, bu yüzden Bindirme'nin MKPolyline olup olmadığını kontrol etmek yerine, bindirmelerinizin hangisinin olduğunu kontrol edin. Yalnızca bir tane varsa, belirtilen polyline işleyicisini hangisinin olduğundan emin olmadan döndürün.