Junior
Jakie są sposoby obsługi opcjonalnych w języku Swift?
sobes.tech AI
Odpowiedź od AI
-
Wymuszone odpakowywanie:
// Używa się !, jeśli jest się pewnym, że opcjonalna wartość zawiera wartość. let optionalValue: String? = "cześć" let unwrappedValue = optionalValue! // Niebezpieczne, może spowodować awarię, jeśli wartość to nil -
Wiązanie opcjonalne (if let, guard let):
// if let - wykonuje blok kodu, jeśli opcjonalna wartość nie jest nil. if let value = optionalValue { print(value) } // guard let - używa się do wczesnego wyjścia z funkcji lub bloku, jeśli opcjonalna wartość to nil. func processValue(_ value: String?) { guard let unwrappedValue = value else { print("Wartość to nil") return } print(unwrappedValue) } -
Łańcuchowanie opcjonalne:
// Pozwala bezpiecznie wywołać metody, właściwości lub subskrypty na opcjonalnych wartościach. struct Company { var address: Address? } struct Address { var street: String? } let company: Company? = Company(address: Address(street: "Main Street")) let street = company?.address?.street // Wynik będzie opcjonalnym String? -
Operator koalescencji null (??):
// Dostarcza wartość domyślną, jeśli opcjonalna wartość to nil. let name: String? = nil let displayName = name ?? "Anonim" // Jeśli name to nil, displayName będzie "Anonim" -
Opcjonalne domyślnie odpakowane:
// Wykrywane przez ! po typie. Kompilator nie wymaga jawnego odpakowania, ale może to prowadzić do awarii, jeśli nil. let implicitlyUnwrappedString: String! = "to jest ciąg" print(implicitlyUnwrappedString.count) // Nie wymaga ! do dostępu do członków -
Użycie
if case letz dopasowaniem wzorca:// Bardziej zaawansowana metoda sprawdzania enumów z wartościami powiązanymi, w tym opcjonalnych. enum Result { case success(String) case failure } let result: Result? = .success("Operacja zakończona") if case let .success(message)? = result { print("Sukces z wiadomością: \(message)") }