2015-09-08 13 views
6

Próbuję narysować łamaną na mapie Swift 2. To wszystko działa dobrze, ale pojawia się ostrzeżenie kompilatora na ten kod:Swift 2 MKMapViewDelegate rendererForOverlay ostrzeżenie kompilatora

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 

} 

Będzie mi dać ostrzeżenie mówi, że „Wynik i parametry MapView (rendererForOverlay) mają różną opcjonalność niż oczekiwane przez protokół MKMapViewDelegate

teraz będzie to skompilować w porządku, ale robaki mnie, że ostrzeżenie kompilatora jest wyświetlana.

Gdybym zmienić pierwszą linię do

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

poprzez usunięcie!, Ostrzeżenie odejdzie, ale pojawia się błąd, że zwrot nie może być zerowa, a kod nie zostanie skompilowany już.

Jest to również śledzić ten wątek, gdzie ten sam problem został podany, ale nie satysfakcjonująca odpowiedź jest dostępny: Swift 2 MKMapViewDelegate rendererForOverlay optionality

Czy ktoś może rzucić jakieś światło na właściwej drodze, aby korzystać z tej funkcji już w Swift 2?

Dzięki.

Odpowiedz

17

Przechodzenie przez co sugeruje autouzupełnianie prototyp wygląda następująco:

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

I najwyraźniej nic nie można zrobić, z wyjątkiem powrotu return MKPolylineRenderer() gdzie normalnie byś powrotu zero.

Dla mnie to wygląda na błąd implementacji, bo oto co dokumentacja mówi o zwróconego obiektu:

renderujący do wykorzystania podczas prezentacji określonego nakładki na mapie. Jeśli zwrócisz zero, nie zostanie narysowana zawartość dla określonego obiektu nakładki.

Proponuję utworzyć sprawę do niej w Apple's bug report

+1

Dzięki za to. Dzięki temu kod działa i pozbywa się ostrzeżeń. –

+0

return nil daje błąd. więc pomóż mi –

5

Nie wracaj nil. Ta funkcja jest wywoływana tylko w przypadku nakładek, które tworzysz, więc zamiast sprawdzać, czy nakładka to MKPolyline, sprawdź, która z twoich nakładek jest. Jeśli masz tylko jeden, zwróć określony renderer polilinii bez sprawdzania, który to jest.

Powiązane problemy