Rozpakowuję dwie wartości ze słownika i przed ich użyciem muszę je rzutować i przetestować pod kątem odpowiedniego typu. Oto, co wymyśliłem:
var latitude : AnyObject! = imageDictionary["latitude"]
var longitude : AnyObject! = imageDictionary["longitude"]
if let latitudeDouble = latitude as? Double {
if let longitudeDouble = longitude as? Double {
// do stuff here
}
}
Ale chciałbym spakować te dwa, jeśli pozwolę zapytaniom w jedno. Żeby coś takiego:
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
Ta składnia nie działa, więc zastanawiałem się, czy jest na to piękny sposób.
if-statement
swift
optional
suntoch
źródło
źródło
Odpowiedzi:
Aktualizacja dla Swift 3:
W Swift 3 będą działać następujące elementy:
Pamiętaj tylko, że jeśli jedno z prób opcjonalnego powiązania nie powiedzie się, kod wewnątrz
if-let
bloku nie zostanie wykonany.Uwaga: nie wszystkie klauzule muszą być klauzulami „let”, możesz mieć dowolną serię sprawdzeń logicznych oddzielonych przecinkami.
Na przykład:
Swift 1.2:
Apple mogło przeczytać Twoje pytanie, ponieważ Twój oczekiwany kod kompiluje się poprawnie w Swift 1.2 (dziś w wersji beta):
Swift 1.1 i starsze:
Oto dobra wiadomość - możesz to zrobić całkowicie. Instrukcja switch na krotce twoich dwóch wartości może używać dopasowania do wzorca, aby rzutować obie na
Double
w tym samym czasie:Aktualizacja: ta wersja kodu działa teraz poprawnie.
źródło
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {...}
. Czy drugielet
wiązanie również jest opcjonalne? To znaczyapp
nie jest już opcjonalne. dobrze?app
nie jest już opcjonalna, ale jejwindow
właściwość jest (jej typ toUIWindow?
), więc to właśnie rozpakowujesz.Dzięki Swift 3 możesz użyć opcjonalnego łączenia łańcuchowego, instrukcji przełączania lub opcjonalnego wzorca w celu rozwiązania problemu.
1. Używanie
if let
(opcjonalne wiązanie / opcjonalne tworzenie łańcuchów)Język Swift Programming Language stwierdza o opcjonalnym łańcuchowaniu:
Dlatego w najprostszym przypadku możesz użyć następującego wzorca, aby użyć wielu zapytań w opcjonalnej operacji tworzenia łańcucha:
2. Używanie krotek i wiązania wartości w instrukcji switch
Jako alternatywa dla prostego opcjonalnego łączenia łańcuchowego, instrukcja switch może oferować drobnoziarniste rozwiązanie, gdy jest używana z krotkami i wiązaniem wartości:
3. Używanie krotek z
if case
(opcjonalny wzorzec)if case
( wzorzec opcjonalny ) zapewnia wygodny sposób rozpakowania wartości opcjonalnego wyliczenia. Możesz go używać z krotkami, aby wykonać opcjonalne łańcuchowanie z wieloma zapytaniami:źródło
Swift 3.0
źródło