„Swift 101“ - darbo su „Swift“ naujomis pasirinktinėmis vertėmis

„Swift“ programavimo kalba turi naują funkciją, vadinamą „ Optionals“, kurie anksčiau nebuvo pasiekiami „Objective-C“. Jie yra panašūs į neprivalomus tipus „Java“ ir „ nullable“ tipus C # programavimo kalba.

Kodėl naudoti neprivalomus?

Galbūt jūs galvojate: „Galiu ignoruoti pasirinktinius variantus - tai funkcija, kurios aš niekada nenaudosiu“, bet aš rekomenduoju jums skaityti toliau. Jūs pastebėsite, kad turite naudoti „Swift“ parinktis, jei kada nors reikia vertės nuliui!

Pasirinktinės reikšmės „Swift“ leidžia jums tiksliau nurodyti savo kodą, leisdami nurodyti, kada yra gerai, kad tam tikra vertė būtų tuščia (ir kai tai nėra!) Tai padeda išvengti įprastų programavimo klaidų, kurios atsiranda programoje, kai susiduria su netikėta nulinė vertė.

„Swift“ parinktys taip pat padeda jūsų programos kodui labiau atspindėti gebėjimą, kurį jau turite pagrindiniuose duomenyse, nurodydami, kad konkretus objekto atributas yra neprivalomas. Kaip parodyta 1 paveiksle, galite nurodyti atributo tipą (šiuo atveju eilutė) ir nurodyti, ar vertė yra neprivaloma.

1 paveikslas - galite nurodyti, kad pagrindinio duomenų subjekto atributas yra neprivalomas.

Dabar „Swift“ leidžia daryti tą patį su savo savybėmis ir kintamaisiais. Čia yra lygiavertė neprivaloma deklaracija „Swift“:

var middleName: String?

Ši deklaracija sukuria kintamąjį, pavadintą „ String “ tipo „ MiddleName “. Klausimo ženklas ( ? ) Po eilutės kintamojo tipo rodo, kad kintamasis „ MiddleName“ gali turėti reikšmę, kuri gali būti eilutė arba nulis . Visi, žiūrintys į šį kodą, iš karto žino, kad „ MiddleName“ gali būti nulis . Tai savęs dokumentavimas!

Jei nenurodote pradinės vertės pasirinktinei konstantai ar kintamajam (kaip parodyta aukščiau), vertė automatiškai nustatoma nuliui . Jei norite, galite aiškiai nustatyti pradinę reikšmę nuliui:

var middleName: String? = nil

Dabar pažiūrėkime, kaip „Swift“ naudojamas nulis .

nulis Swift

Iš pirmo žvilgsnio jis gali būti akivaizdus, ​​tačiau tik pasirinktiniai gali būti nuliniai . Kaip nurodyta „Apple“ „ The Swift“ programavimo kalbų knygoje (galima nemokamai įsigyti „iBooks“ parduotuvėje):

nil negali būti naudojama su neprivalomomis konstantomis ir kintamaisiais. Jei jūsų kodo pastovus ar kintamasis turi sugebėti susidoroti su vertės nebuvimu tam tikromis sąlygomis, visada nurodykite, kad tai yra neprivaloma atitinkamos rūšies vertė.

Tai reiškia, kad negalite kažko panašaus daryti, nes pirmojo vardo kintamasis nėra pažymėtas klaustuku, nurodant, kad jis yra neprivalomas:

var firstName: String = nil

Šis kodas sukuria šią kompiliavimo laiko klaidą:

Tipas „String“ neatitinka protokolo „NilLiteralConvertible“ .

Taip pat svarbu pažymėti, kad „Swift“ nulis yra kitoks nei „C“ tikslo. Objektyvo C atveju nulis yra rodyklė į neegzistuojantį objektą. „Swift“ („Swift“) nulinė tiesiog rodo, kad nėra vertės - tai nėra rodyklė. Tai reiškia, kad galite nurodyti bet kokio tipo pasirinktinius, ne tik objektų tipus.

Prieiga prie pasirinktinių verčių

Skirtingai nuo kitų programavimo kalbų, „Swift“ negalite tiesiogiai pasiekti pasirinktinės vertės . Jei norite pasiekti pagrindinę vertę, pirmiausia turite išskleisti pasirinktinį variantą . Paimkite, pavyzdžiui, šį kodą:

var firstName: eilutė = "Ryan"

var middleName: eilutė? = "Michael"

var firstAndMiddleNames: eilutė

firstAndMiddleNames = firstName + "" + middleName

Pirmieji trys kodų eilutės nurodo pirmąjį pavadinimo eilutės kintamąjį, vidurinį pavadinimą pasirinktinį eilutės kintamąjį ir firstAndMiddleNames eilutės kintamąjį. Kito kodo eilutė susieja (sujungia) pirmojo vardo ir vidutinio vardo kintamas reikšmes kartu su tarpu tarp jų. Galbūt nustebsite, kad ši kodo eilutė generuoja šią kompiliavimo laiko klaidą:

Pasirinkimo tipo „String?“ Reikšmė nesupakuota; Ar norėjote naudoti „!“ arba „?“?

Tai vienas iš „Swift“ apsaugos mechanizmų. Tai verčia jus pripažinti, kad vertė gali būti nulinė . Taigi, kaip išsirinkite neprivalomą? Yra du pagrindiniai būdai, kaip aprašyta tolesniuose skyriuose.

Priverstinio vyniojimo naudojimas neprivalomiesiems

Kaip teigiama ankstesniame skyriuje pateiktoje kompiliatoriaus paklaidoje, vienas iš pasirinktinės vertės išskyrimo būdų yra tai, kad po pasirinktinio užrašo, kad būtų aiškiai išskleista, naudokite šaukinį (!). Pavyzdžiui:

firstAndMiddleNames = firstName + " " + middleName!

Tai rankiniu būdu verčia vidutinio vardo reikšmę neprivaloma. Tačiau jei „ MiddleName “ paleidimo metu yra nulis, tai sukurs EXC_BAD_INSTRUCTION paleisties laiko klaidą. Taigi, akivaizdu, kad nenorėtumėte naudoti priverstinio išpakavimo, nebent esate visiškai tikri, kad vertė nėra nulinė .

Pasirinktinio rišimo naudojimas, jei norite panaikinti pasirinktinius

Galite naudoti techniką, vadinamą neprivalomu privalomuoju, kad patikrintumėte, ar neprivaloma yra reikšmė, ir, jei taip, išsaugokite šią vertę laikinu kintamu arba pastoviu. Jei norite parodyti, kaip tai veikia su mūsų ankstesniu pavyzdžiu, patikrinkite šį kodą:

var firstName: String = "Ryan"

var middleName: eilutė? = "Michael"

var firstAndMiddleNames: eilutė

jei tegul vidutinis = vidurinis vardas

{

firstAndMiddleNames = firstName + "" + viduryje

}

Kitas

{

firstAndMiddleNames = pirmasis vardas

}

Kai patikrinimo būsena tikrinama vykdymo metu, jei „ MiddleName“ kintamajame yra eilutės reikšmė, būklė vertinama tikra, vidutinio vardo kintamajame esanti reikšmė yra neįpakuota, saugoma vidurinėje pastovėje ir kodas, jei įrašas yra įrašas, kuriame yra kreivų breketų. vykdomas.

Jei „ MiddleName“ kintamajame yra nulio, būklė vertinama kaip klaidinga, pasirinktinė vertė nėra išspausdinta, o kodas kitoje ataskaitoje garbanosiose petnešose.

Netiesiogiai apvyniojami neprivalomi

„Swift“ taip pat turi kažką, vadinamą netiesiogiai neįtrauktais pasirinktiniais. Tai yra pasirinktiniai elementai, kurių nereikia išpakuoti naudojant priverstinį išpakavimą (!) Arba neprivalomą įpareigojimą, nes jie yra nesupakuoti (automatiškai). Jie deklaruojami naudojant šaukinį (!), O ne klausimyną (?).

Dirbdami su sąsajos kūrimo vietomis ( IBOutlet savybės), dažnai matote netiesiogiai neįtrauktus pasirinktinius . Pavyzdžiui:

@IBOutlet weak var lblDescription: UILabel!

Šiame kode lblDescription išleidimo nuosavybė turi po jo priskyrimo ženklą, nurodantį, kad jis yra netiesiogiai supakuotas. Tai leidžia jums prieiti prie nuosavybės be pakavimo.

Šiame pavyzdyje nėra garantuota, kad išleidimo vietoje yra nuoroda į etiketę, bet tai turėtų būti visiškai. Jei joje nėra nuorodos į etiketę, tai reiškia, kad ryšys tarp lizdo ir etiketės buvo pažeistas. Tokiu atveju, gerai, jei turite klaidų, nes norite žinoti, kad ryšys yra sugadintas, kad galėtumėte ją išspręsti!

Akivaizdu, kad tais atvejais, kai nesate tikri, kad pastovus arba kintamasis turi vertę, turėtumėte naudoti įprastą pasirinktinį.

Išvada

Pasirinktinai yra puiki nauja „Swift“ funkcija, leidžianti saugiai tvarkyti nulines reikšmes „iOS“ programose. Rekomenduoju peržiūrėti šį įrašą kelis kartus, kad įsitikintumėte, jog suprantate pagrindines sąvokas, o tada grįžkite į „Apple“ „ The Swift“ programavimo kalbų knygą, kad sužinotumėte daugiau apie tai, kaip „Swift“ naudojami opcionai.