Swift 101 - Práca s novými voliteľnými hodnotami Swift

Programovací jazyk Swift má novú funkciu nazvanú voliteľné, ktoré predtým neboli dostupné v Objective-C. Sú podobné voliteľným typom v jazyku Java a nulovateľným typom v programovacom jazyku C #.

Prečo používať voliteľné doplnky?

Môžete si myslieť, "Môžem ignorovať voľby - je to funkcia, ktorú nikdy nebudem používať, " ale odporúčam, aby ste si prečítali ďalšie informácie. Zistíte, že musíte použiť voľby v Swift, ak niekedy potrebujete hodnotu, ktorá má byť nulová!

Voliteľné hodnoty v službe Swift vám umožňujú byť presnejší vo svojom kóde tým, že vám umožnia určiť, kedy je v poriadku, aby bola určitá hodnota prázdna (a keď to nie je!) Toto vám pomôže vyhnúť sa bežným chybám pri programovaní, ktoré sa vyskytujú vo vašej aplikácii, keď sa vyskytne neočakávaná nulová hodnota.

Voliteľné doplnky Swift tiež pomáhajú kódu vašej aplikácie presnejšie odrážať schopnosť, ktorú už máte v Core Data, aby ste označili, že konkrétny atribút entity je voliteľný. Ako je znázornené na obrázku 1, môžete zadať typ atribútu (String, v tomto prípade), ako aj uviesť, či je hodnota voliteľná.

Obrázok 1 - Môžete zadať, že atribút entity Core Data je voliteľný.

Teraz vám Swift umožňuje urobiť to isté s vlastnosťami a premennými. Toto je ekvivalentné voliteľné vyhlásenie v službe Swift:

var middleName: String?

Toto vyhlásenie vytvára premennú s názvom middleName typu String . Otazník ( ? ) Za typom premennej String označuje, že premenná middleName môže obsahovať hodnotu, ktorá môže byť buď String alebo nil . Každý, kto sa pozrie na tento kód, okamžite vie, že middleName môže byť nula . Je to samo-dokumentovanie!

Ak nezadáte počiatočnú hodnotu pre voliteľnú konštantu alebo premennú (ako je uvedené vyššie), hodnota sa automaticky nastaví na nulu . Ak chcete, môžete počiatočnú hodnotu explicitne nastaviť na nulu:

var middleName: String? = nil

Teraz sa pozrieme bližšie na to, ako sa v Swift používa nula .

nula v Swift

Na prvý pohľad to nemusí byť zrejmé, ale iba voliteľné položky môžu byť nulové . Ako je uvedené v knihe Apple Swift Programming Language (k dispozícii zdarma v obchode iBooks):

nil nemôže byť použitý s nepovinnými konštantami a premennými. Ak konštanta alebo premenná vo vašom kóde musí byť schopná vyrovnať sa s absenciou hodnoty za určitých podmienok, vždy ju deklarujte ako voliteľnú hodnotu príslušného typu.

To znamená, že nemôžete urobiť niečo také, pretože premenná firstName nie je označená otáznikom, ktorý označuje, že je voliteľná:

var firstName: String = nil

Tento kód produkuje nasledujúcu chybu kompilácie:

Typ 'String' nezodpovedá protokolu 'NilLiteralConvertible' .

Je tiež dôležité poznamenať, že nula v Swift je iná ako nula v Objective-C. V Objective-C je nil ukazovateľ na neexistujúci objekt. V Swift, nil jednoducho označuje absenciu hodnoty - to nie je ukazovateľ. To znamená, že môžete zadať voľby ľubovoľného typu, nielen typy objektov.

Prístup k voliteľným hodnotám

Na rozdiel od iných programovacích jazykov nemôžete v systéme Swift pristupovať k voliteľnej hodnote priamo . Ak chcete získať prístup k základnej hodnote, musíte najprv rozbaliť voliteľnú voľbu . Vezmite napríklad nasledujúci kód:

var firstName: String = "Ryan"

var middleName: String? = "Michael"

var firstAndMiddleNames: String

firstAndMiddleNames = firstName + "" + middleName

Prvé tri riadky kódu deklarujú premennú firstName String, middleName voliteľné String variable a premennú firstAndMiddleNames String. Ďalší riadok kódu zlúči (spojí) hodnoty premennej firstName a middleName spolu s medzerou medzi nimi. Možno budete prekvapení, že tento riadok kódu vygeneruje nasledujúcu chybu v čase kompilácie:

Hodnota voľby typu 'String?' nevybalené; chceli ste použiť '!' alebo „?“?

To je jeden z Swiftových ochranných mechanizmov. Núti vás uznať, že hodnota môže byť nulová . Ako teda rozbalíte voliteľné? Existujú dva hlavné spôsoby, ako sú opísané v nasledujúcich častiach.

Použitie vynúteného rozbalenia pre voliteľné položky

Ako navrhla chyba kompilátora v predchádzajúcej časti, jedným zo spôsobov, ako rozbaliť voliteľnú hodnotu, je použiť výkričník (!) Za voliteľným doplnkom na explicitné rozbalenie. Napríklad:

firstAndMiddleNames = firstName + " " + middleName!

Toto ručne núti hodnotu middleName voliteľné na rozbalenie. Avšak, ak middleName obsahuje nulu v čase spustenia, bude to produkovať EXC_BAD_INSTRUCTION chyba behu. Takže, samozrejme, nechcete použiť nútené rozbalenie, pokiaľ si nie ste úplne istí, že hodnota nie je nulová .

Použitie voliteľného viazania na rozbalenie voliteľných komponentov

Na testovanie, či voliteľné obsahuje hodnotu, a ak áno, uložte túto hodnotu do dočasnej premennej alebo konštanty. Ak chcete ukázať, ako to funguje s naším predchádzajúcim príkladom, pozrite si tento kód:

var firstName: String = "Ryan"

var middleName: String? = "Michael"

var firstAndMiddleNames: String

ak nechať middle = middleName

{

firstAndMiddleNames = firstName + "" + stredné

}

inak

{

firstAndMiddleNames = firstName

}

Ak je podmienka if skontrolovaná v čase spustenia, ak premenná middleName obsahuje hodnotu String, podmienka sa vyhodnotí ako true, hodnota obsiahnutá v premennej middleName sa nerozbalí, uloží do strednej konštanty a kód v zložených zátvorkách príkazu if sa vykoná.

Ak premenná middleName obsahuje nulu, podmienka sa vyhodnotí ako false, voliteľná hodnota sa nerozbalí a vykoná sa kód v zložených zátvorkách príkazu else .

Implicitne nerozbalené voliteľné položky

Swift má aj niečo, čo sa nazýva implicitne nerozbalené voľby. Toto sú voliteľné doplnky, ktoré nemusia byť rozbalené pomocou núteného rozbalenia (!) Alebo voliteľnej väzby, pretože sú implicitne nerozbalené (automaticky). Sú deklarované pomocou výkričníka (!) Namiesto otáznika (?).

Pri práci so zásuvkami rozhrania Interface Builder (vlastnosti IBOutlet ) často vidíte implicitne nerozbalené voliteľné doplnky . Napríklad:

@IBOutlet weak var lblDescription: UILabel!

Vlastnosť lblDescription má v tomto kóde za ňou výkričník, ktorý označuje, že je implicitne rozbalený. To vám umožní prístup k vlastnosti bez rozbalenia.

V tomto príklade nie je zaručené, že výstupná vlastnosť bude obsahovať odkaz na štítok, ale absolútne by mala . Ak neobsahuje odkaz na štítok, znamená to, že spojenie medzi vývodom a štítkom bolo prerušené. V takom prípade je v poriadku mať chybu pri behu, pretože chcete vedieť, že pripojenie je prerušené, takže ho môžete opraviť!

Je zrejmé, že v prípadoch, keď si nie ste 100% istí, že konštanta alebo premenná obsahuje hodnotu, mali by ste namiesto toho použiť regulárny voliteľný.

záver

Voliteľné položky sú skvelou novinkou funkcie Swift, ktorá vám umožňuje bezpečne spracovať nulové hodnoty v aplikáciách iOS. Odporúčam prehodnotiť tento príspevok niekoľkokrát, aby ste sa uistili, že rozumiete základným pojmom a potom sa vráťte do knihy Apple Swift Programming Language, aby ste sa dozvedeli viac o tom, ako sa voliteľné možnosti používajú v službe Swift.