TL; DR
popViewController(animated:)
zwraca UIViewController?
, a kompilator wyświetla to ostrzeżenie, ponieważ nie przechwytujesz wartości. Rozwiązaniem jest przypisanie go do podkreślenia:
_ = navigationController?.popViewController(animated: true)
Swift 3 Change
Przed wersją Swift 3 wszystkie metody miały domyślnie „wynik do odrzucenia”. Ostrzeżenie nie pojawi się, jeśli nie uchwycisz, co zwróciła metoda.
Aby powiedzieć kompilatorowi, że wynik powinien zostać przechwycony, trzeba było dodać @warn_unused_result
przed deklaracją metody. Byłby używany do metod, które mają zmienną postać (np. sort
I sortInPlace
). Dodałbyś, @warn_unused_result(mutable_variant="mutableMethodHere")
żeby poinformować o tym kompilator.
Jednak w Swift 3 zachowanie jest odwrócone. Wszystkie metody ostrzegają teraz, że zwracana wartość nie jest przechwytywana. Jeśli chcesz powiedzieć kompilatorowi, że ostrzeżenie nie jest konieczne, dodajesz @discardableResult
przed deklaracją metody.
Jeśli nie chcesz używać zwracanej wartości, musisz jawnie powiedzieć kompilatorowi, przypisując ją do znaku podkreślenia:
_ = someMethodThatReturnsSomething()
Motywacja do dodania tego do Swift 3:
- Zapobieganie możliwym błędom (np. Używanie
sort
myślenia modyfikuje kolekcję)
- Wyraźny zamiar nie przechwytywania lub konieczności przechwytywania wyniku dla innych współpracowników
Interfejs API UIKit wydaje się być opóźniony, nie dodając @discardableResult
do całkowicie normalnego (jeśli nie bardziej powszechnego) użycia popViewController(animated:)
bez przechwytywania wartości zwracanej.
Czytaj więcej