0Pricing
Swift Academy · Lekcja

Typy opcjonalne

Typy opcjonalne

Typy opcjonalne to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 1. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 1 lekcji w sumie.

Wprowadzenie

Dzień dobry,

Służy do wyrażenia tego, że zmienna opcjonalna może nie mieć wartości.

Jeśli zmienna typu opcjonalnego ma wartość, zostaje ona rozpakowana i użyta. W przeciwnym razie wartość nie istnieje.

Typ opcjonalny dla wielu typów w Swift

Można go porównać do wskaźnika nil w Obj-C. Wskaźnik nil jest jednak poprawny wyłącznie dla typów obiektowych.

Typy opcjonalne w Swift są używane nie tylko dla typów obiektowych, lecz także dla Struct, enum oraz typów prostych.

var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable 
automatically takes the value of nil.
*/

Wartość nil w Swift i nil w Obj-C nie są tym samym

Wartość nil w Swift i nil w Obj-C nie są takie same.

W Obj-C wskaźnik nil oznacza brak obiektu. W Swift nie jest to wskaźnik nil. Wartość nil w Swift oznacza brak danych i jest obsługiwana także dla innych typów, nie tylko dla typu obiektowego.

Wymuszone rozpakowanie

Dostęp do zmiennych zdefiniowanych jako opcjonalne można uzyskać za pomocą wymuszonego rozpakowania.

Za pomocą operatora wykrzyknika można wymusić rozpakowanie w kodzie, jednak ogólnie nie jest to zalecane.

Jeśli podczas wymuszonego rozpakowania dane, do których się odwołujemy, nie są dostępne, wystąpi błąd wykonania.

let convertedNumber : Int? = 123
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."

Dostęp do typu opcjonalnego za pomocą wiązania opcjonalnego

Dostęp do typu opcjonalnego za pomocą wiązania opcjonalnego

Za pomocą bloku if let możemy uzyskać dostęp do wartości zmiennej opcjonalnej, przypisując ją do stałej lub zmiennej.

Jest to bardziej elegancka metoda niż wymuszone rozpakowanie.

var possibleNumber : String? = "10"

if let actualNumber = possibleNumber {
    print(actualNumber)
}

Przykład

if let firstNumber = Int("4"), let secondNumber = Int("42"), 
  firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
 If at least one of them is false,
 it will not be entered in the if blog.
*/

Opcjonalne wartości rozpakowywane niejawnie

Opcjonalne wartości rozpakowywane niejawnie

W niektórych przypadkach wartość opcjonalna jest przypisywana na początku, a w kolejnych etapach mamy pewność, że nie jest nil.

W takich sytuacjach zamiast oznaczać ją jako opcjonalną (?) używa się operatora (!), wskazując, że ta wartość na pewno nie jest nil. 

Taki sposób definiowania jest określany jako „opcjonalne wartości rozpakowywane niejawnie”.

Niejawnie rozpakowywane

Niejawnie rozpakowywane

Najczęściej stosuje się je podczas inicjalizacji klasy.

W przeciwieństwie do tradycyjnych typów opcjonalnych nie musimy rozpakowywać zmiennych zadeklarowanych jako niejawnie rozpakowywane.

let possibleString: String? = "An optional string."
 // requires an exclamation mark
let forcedString: String = possibleString!

let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString 

Przykład

Jeśli przypiszemy nil do zmiennych tego typu, wystąpią błędy wykonania.

Przyjrzyjmy się przykładowi

/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional 
in the same way we use classic optional.
*/

var assumedString: String! = nil

if let definiteString = assumedString {
    print(definiteString)
}
// Prints "An implicitly unwrapped optional string."

Ostrzeżenie

Jeśli zmienna może przyjmować wartość nil, nie należy używać niejawnie rozpakowywanego typu opcjonalnego.

Operator nil-coalescing

Operator nil-coalescing

Ułatwia rozpakowywanie typów opcjonalnych.

Przeanalizujmy przykład.

let defaultColorName = "red"
 // defaults to nil
var userDefinedColorName: String?  

var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil, 
so colorNameToUse is set to the default of "red"
*/


// a != nil ? a! : b 
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn, 
otherwise it returns the default value, ie b.
*/

Gratulacje

Gratulacje 🎉

Typy opcjonalne to jedna z najważniejszych funkcji języka Swift. Korzystając z typów opcjonalnych, pozbywamy się kontroli Nil, piszemy kod w bardziej elegancki sposób i zwiększamy bezpieczeństwo aplikacji.

Do zobaczenia w następnej lekcji 🥳

Typy opcjonalne — ilustracja 12

Często zadawane pytania

Czy lekcja „Typy opcjonalne” jest bezpłatna?

Tak — pełny tekst „Typy opcjonalne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 1 lekcji w sumie.

Co nauczysz się w „Typy opcjonalne”?

Typy opcjonalne Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 1.

Ile czasu zajmuje lekcja „Typy opcjonalne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

← Powrót do Swift Academy