Ilekroć potrzebujemy czegoś z opcjonalną wartością w swift, musimy rozpakować go, aby działał, a nie na opcjonalnym, ale na wartości "wewnątrz" opcjonalnej.Wpisz odlewane opcjonalne wartości
var optionalString:String? = "Hello"
optionalString!.append(" World!")
Uwaga wykrzyknik w drugim wierszu.
Ale korzystając z opcjonalnego operatora rzutowania (jak?) Na opcjonalnej wartości, nie trzeba odwijać opcji opcjonalnej, po prostu dostarczamy jej opcjonalne i działa ona po prostu magicznie.
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString as? String
Uwaga na nieobecny wykrzyknik w drugiej linii.
Magia jest nieco bardziej oczywiste, jeśli spell it out:
let sneakyString:Any? = Optional("Hello")
let notSoSneakyString = sneakyString as? String
nie jest to ciąg próbujemy rzucić ale enum z ciągiem jako powiązanej wartości.
Spodziewam się, że będę musiał to zrobić:
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString! as? String
Uwaga wykrzyknik na drugiej linii.
Czy operatorzy odlewania typu działają w ten sam sposób na urządzenia opcjonalne i inne opcje?
Może to ma jednak sens. Aby odwijać zero, opcjonalny jest błąd środowiska wykonawczego. I nie rzutujemy z Opcjonalnego (Any) na String, ale z Opcjonalnego (Any) na Opcjonalne (String). – weenzeel