Swift 101 - darbs ar Swift jaunajām fakultatīvajām vērtībām

Programmas Swift valodai ir jauna iezīme, ko sauc par opcionāliem, kas iepriekš nebija pieejami C mērķī. Tie ir līdzīgi izvēles veidiem Java un nullable veidiem C # programmēšanas valodā.

Kāpēc izvēlēties izvēles?

Iespējams, jūs domājat: "Es varu ignorēt opcionālus - tā ir funkcija, ko es nekad neizmantosim, " bet es iesaku jums lasīt tālāk. Jūs atradīsiet, ka jums ir jāizmanto opcijas Swift, ja jums kādreiz ir nepieciešama nulle!

Izvēles vērtības programmā Swift ļauj jums būt precīzākiem jūsu kodā, ļaujot norādīt, kad ir pareizi, ka konkrēta vērtība ir tukša (un kad tas nav!) Tas palīdz izvairīties no kopīgām programmēšanas kļūdām, kas rodas jūsu lietotnē, kad tā saskaras ar negaidīta vērtība.

Swift opcijas arī palīdz jūsu lietotnes kodam precīzāk atspoguļot spēju, kas jums jau ir pamatdatos, norādot, ka konkrēts objekta atribūts nav obligāts. Kā parādīts 1. attēlā, varat norādīt atribūta veidu (šajā gadījumā virkne), kā arī norādīt, vai vērtība nav obligāta.

1. attēls - Jūs varat norādīt, ka Core Data vienības atribūts nav obligāts.

Tagad Swift ļauj jums darīt to pašu ar jūsu īpašībām un mainīgajiem. Šeit ir līdzvērtīga izvēles deklarācija Swift:

var middleName: String?

Šī deklarācija izveido mainīgo, ko sauc par String tipa nosaukumuNavName. Jautājuma zīme ( ? ) Pēc String mainīgā tipa norāda, ka mainīgais NNN mainīgais var saturēt vērtību, kas var būt vai nu String, vai nulle . Ikviens, kas meklē šo kodu, nekavējoties zina, ka vidējais vārds var būt nulle . Tas ir pašdokumentējošs!

Ja nenorādāt sākotnējās vērtības neobligātajam konstantam vai mainīgajam (kā parādīts iepriekš), vērtība jums automātiski tiek iestatīta uz nulli . Ja vēlaties, varat skaidri iestatīt sākotnējo vērtību līdz nullei:

var middleName: String? = nil

Tagad aplūkosim tuvāk, kā Swift izmanto nulli .

nulli Swift

Tas var nebūt acīmredzams no pirmā acu uzmetiena, bet tikai opcionāli var būt nulle . Kā norādīts Apple Swift programmēšanas valodas grāmatā (pieejams bez maksas iBooks veikalā):

nil nevar izmantot ar neobligātām konstantēm un mainīgajiem lielumiem. Ja jūsu koda konstantei vai mainīgajam lielumam ir jāspēj tikt galā ar vērtības neesamību noteiktos apstākļos, vienmēr deklarējiet to kā atbilstoša veida izvēles vērtību.

Tas nozīmē, ka jūs nevarat darīt kaut ko līdzīgu, jo pirmā nosaukuma mainīgais nav atzīmēts ar jautājuma zīmi, lai norādītu, ka tas ir izvēles:

var firstName: String = nil

Šis kods rada šādu kompilēšanas laika kļūdu:

Tips "String" neatbilst protokolam "NilLiteralConvertible" .

Svarīgi arī atzīmēt, ka nulli Swift ir atšķirīgs no nulles C mērķī. Objektīvā C nulle ir rādītājs uz neeksistējošu objektu. Swift sistēmā nulle vienkārši norāda, ka nav vērtības - tas nav rādītājs. Tas nozīmē, ka varat norādīt jebkura veida opcijas, ne tikai objektu tipus.

Piekļuve fakultatīvajām vērtībām

Atšķirībā no citām programmēšanas valodām programmā Swift jūs nevarat piekļūt izvēles vērtībai tieši . Lai piekļūtu tās pamatā esošajai vērtībai, vispirms ir jāizņem no izvēles izvēles. Piemēram, izmantojiet šādu kodu:

var firstName: String = "Ryan"

var middleName: String? = "Michael"

var firstAndMiddleNames: String

firstAndMiddleNames = firstName + "" + middleName

Pirmās trīs koda rindiņas paziņo par pirmā nosaukuma virknes mainīgo, vidējā nosaukuma neobligāto virknes mainīgo un firstAndMiddleNames virknes mainīgo. Nākamais koda rindiņš savieno (pievieno) pirmā nosaukuma un vidējā nosaukuma mainīgās vērtības kopā ar atstarpi starp tām. Iespējams, esat pārsteigts, ka šī koda rinda ģenerē šādu kompilēšanas laika kļūdu:

Opcijas tipa “String?” Vērtība nav iesaiņoti; vai jūs domājāt izmantot '!' vai "?"?

Tas ir viens no Swift aizsardzības mehānismiem. Tas liek jums atzīt, ka vērtība var būt nulle . Tātad, kā jūs noņemat izvēles? Ir divi galvenie veidi, kā aprakstīts turpmākajās sadaļās.

Lietojot piespiedu iesaiņošanu pēc izvēles

Kā liecina iepriekšējās sadaļas kompilatora kļūda, viens veids, kā atbrīvot izvēles vērtību, ir izmantot izsaukuma zīmi (!) Pēc izvēles, lai to skaidri izņemtu. Piemēram:

firstAndMiddleNames = firstName + " " + middleName!

Tas manuāli piespieda vidējā nosaukuma vērtību neiesaiņot. Tomēr, ja middleName palaist laikā ir nulle, tas radīs EXC_BAD_INSTRUCTION palaišanas laika kļūdu. Tātad, jūs, protams, nevēlaties izmantot piespiedu iesaiņošanu, ja vien neesat pilnīgi pārliecināts, ka vērtība nav nulle .

Izvēles saistīšanas izmantošana, lai noņemtu izvēles opcijas

Jūs varat izmantot tehniku, kas pazīstama kā izvēles saistība, lai pārbaudītu, vai fakultatīvais satur vērtību, un, ja tā ir, saglabājiet šo vērtību pagaidu mainīgajā vai nemainīgajā. Lai parādītu, kā tas darbojas ar mūsu iepriekšējo piemēru, skatiet šo kodu:

var firstName: String = "Ryan"

var middleName: String? = "Michael"

var firstAndMiddleNames: String

ja let vidēja = vidējais vārds

{

firstAndMiddleNames = firstName + "" + vidū

}

cits

{

firstAndMiddleNames = pirmais vārds

}

Ja ja nosacījums tiek pārbaudīts palaišanas laikā, ja vidējā nosaukuma mainīgais satur virknes vērtību, nosacījums novērtē patiesību, vidējā nosaukuma mainīgā vērtība ir iesaiņota, saglabāta vidējā konstantā un kodā, ja raksts tiek rādīts, ja paziņojums tiek izpildīts.

Ja vidējā nosaukuma mainīgais satur nulli, nosacījums novērtē false, izvēles vērtība nav iesaiņota, un koda cēlonis cits paziņojums ir izpildīts.

Netieši iesaiņoti izvēles varianti

Swift ir arī kaut kas, ko sauc par netieši iesaiņotiem opcionāliem. Tie ir optiāli, kas nav jāiesaiņo, izmantojot piespiedu iesaiņošanu (!) Vai neobligātu saistīšanu, jo tie ir netieši iesaiņoti (automātiski). Tie tiek deklarēti, izmantojot izsaukuma zīmi (!), Nevis jautājuma zīmi (?).

Strādājot ar Interface Builder vietām, bieži redzat netieši iesaiņotus opcijas ( IBOutlet īpašības). Piemēram:

@IBOutlet weak var lblDescription: UILabel!

Šajā kodā lblDescription izejas īpašumam pēc tam ir izsaukuma zīme, kas norāda, ka tas ir netieši iesaiņots. Tas ļauj jums piekļūt īpašumam bez tās iesaiņošanas.

Šajā piemērā izejas īpašumam nav garantēta atsauce uz etiķeti, bet tai noteikti jābūt . Ja tajā nav norādes uz etiķeti, tas nozīmē, ka savienojums starp kontaktligzdu un etiķeti ir bojāts. Tādā gadījumā ir labi, ka ir kļūdas laiks, jo vēlaties uzzināt, ka savienojums ir bojāts, lai to varētu labot!

Protams, gadījumos, kad neesat 100% pārliecināts, ka konstante vai mainīgais satur vērtību, jums vajadzētu izmantot regulāru izvēles iespēju.

Secinājums

Pēc izvēles ir lieliska jauna Swift funkcija, kas ļauj droši apstrādāt nulles vērtības jūsu iOS lietotnēs. Es ieteiktu pārskatīt šo ziņu dažas reizes, lai pārliecinātos, ka jūs saprotat pamatjēdzienus, un pēc tam doties atpakaļ uz Apple Swift programmēšanas valodas grāmatu, lai uzzinātu vairāk par to, kā Swift tiek izmantoti opcionāli.