Powrót w listopadzie 2016 roku wysłałem pytanie pytaniem, dlaczego nie mogę korzystać straż stworzyć nieopakowanych wersję zmiennej używając tej samej nazwy jako opcjonalny, jak można z niech jeżeli:Kiedy "strażnik niech foo = foo" staje się legalny?
Link: Why isn't guard let foo = foo valid?
Kiedy pisałem to pytanie, poniższy kod nie powiedzie się skompilować z błędem, że „konflikty definition z poprzedniej wartości”:
//Test of using guard to create an unwrapped version of a var, like if let
func guardTest(_ viewController: UIViewController?) -> UIViewController? {
// Check if the current viewController exists
print(String(describing: viewController))
guard let viewController = viewController else {
return nil
}
print(String(describing: viewController))
return viewController
}
jednak ja po prostu znaleźć jakiś kod w pracy, że robi to, i teraz kompiluje bez skargi i robię to, co chcę! Po uruchomieniu wydruku sprawozdania pokazują, że foo jest opcjonalnym przed straży, i rozpakowany opcjonalnie po:
viewController = Optional(<TrochoidDemo.ViewController: 0x7ff16a039a00>)
viewController = <TrochoidDemo.ViewController: 0x7ff16a039a00>
(dodałem funkcję testową guardTest(_:)
do mojego najnowszego projektu open source, jeśli chcesz go wypróbować. jest ona dostępna na Github na https://github.com/DuncanMC/TrochoidDemo)
Cieszę się, że konstrukcja ta działa teraz jak chcę go, ale mylić co do dlaczego to teraz legalne, a kiedy nastąpiła zmiana.
Czy ktoś wie o ostatniej zmianie w definicji języka, która sprawia, że konstrukcja działa tak, jak poprzednio?
To nadal nie działa, aby przedefiniować inną lokalną zmienną w funkcji. Wydaje się, że jest to związane z faktem, że Swift pozwoli ci utworzyć lokalną zmienną, która ma taką samą nazwę jak parametr wejściowy do funkcji. Nie wiem, czy to zawsze działało, ale 'var a = a' jest teraz sposobem przekształcania parametru wejściowego w' var', ponieważ nie można już wstawić znaku var do funkcji. – vacawama
OK, dlaczego głosy na dół? Jeśli uważasz, że moje pytanie jest złe, proszę wyjaśnij dlaczego. –
Ja głosowałem oczywiście. Każde pytanie kwestionujące coś, co moim zdaniem dobrze zrozumiałem, jest dobrym pytaniem w mojej książce. Życzę Wam, aby zmusił was do sporządzenia (konstruktywnego, miejmy nadzieję) komentarza podczas głosowania w dół lub co najmniej w głosowaniu na konstruktywną uwagę kogoś innego. – vacawama