Te surprinde că eu dedicăm un tutorial unei simple adăugiri ca pază
afirmație? Sper că veți înțelege mai bine entuziasmul meu la sfârșitul acestui tutorial. În timpul acestui tutorial, sper să vă conving pază
este altceva decât o adăugare redundantă a limbajului de programare Swift.
Condițiile sunt o componentă fundamentală a fiecărui limbaj de programare. Obiectivul C și Swift nu fac excepție de la această regulă. Dacă intenționați să scrieți o aplicație a oricărei complexități, condiționările vor trece prin calea voastră, nu le scăpați.
Din păcate, condiționalitățile sunt adesea chiar cauza complexității. Condițiile înstrăinate, în special, pot duce la dificultăți de identificare a unor bug-uri, cod greu de înțeles și cazuri de margine ușor de neglijat.
Pentru a păstra imbricate dacă
declarațiile la minim, folosesc frecvent următorul model în Obiectiv-C.
- (void) fetchListOfCustomers: (NSArray *) clienți if (! self.reachable) retur; dacă (! self.connected) reveniți; dacă ! clienții ||! [clienții numără] return); ...
Ideea este de a salva cât mai curând posibil. dacă
instrucțiunile din exemplu reprezintă un set de cerințe care trebuie îndeplinite înainte ca restul corpului metodei să fie executat.
Exemplul de mai sus se traduce în următorul echivalent ceva mai complex.
- (void) fetchListOfCustomers: (NSArray *) clienți if (self.reachable && self.connected) if (clienți && [clienți conta]) ...
Vedeți problema care se ascunde în acest exemplu? Suntem deja imbogatiti cu doua nivele adanci fara a face nimic interesant.
Este ușor să traduceți modelul de mai sus la Swift. Sintaxa pare similar, dar datorită clienții
fiind opțional, trebuie să despachetăm clienții
argument înainte de a putea accesa valoarea sa.
func fetchListOfCustomers (clienți: [Customer]?) if! reachable return if! connected return dacă clienții = clienții unde customers.count> 0 print (customers)
Swift 2 introduce modelul pază
afirmație. Acesta a fost conceput special pentru a părăsi mai devreme o metodă sau o funcție. pază
declarația este ideală pentru a scăpa de condiționări profund imbricate, al căror unic scop este validarea unui set de cerințe. Uitați-vă la exemplul actualizat în care am înlocuit fiecare dacă
declarație cu noul pază
afirmație.
func fetchListOfCustomers (clienți: [Client]?) pază accesibilă altceva return gardian conectat altceva return gardă permite clienților = clienți unde customers.count> 0 alt return print (clienți)
Există mai multe lucruri demne de remarcat. Să începem cu sintaxa.
pază
cuvântul cheie subliniază faptul că validăm o cerință. Noi suntem păzit împotriva ceva. În exemplu, verificăm explicit dacă accesibil
și conectat
sunteți Adevărat
. Dacă nu, atunci părăsim metoda mai devreme. Ideea este că sintaxa este mai explicită cu privire la cerințe decât o regulă dacă
afirmație.
Rețineți că a pază
declarația are întotdeauna un altfel
clauză. altfel
clauza este executată dacă condiția pază
declarația se evaluează la fals
. Utilizarea pază
are sens mult mai mult când validați cerințele.
În altfel
clauza, trebuie să transferați controlul departe de domeniul în care pază
apare declarația. Noi folosim a întoarcere
în exemplul de mai sus, dar ați putea, de exemplu, să utilizați a continua
declarație dacă sunteți într-o buclă sau aruncați o eroare. Uitați-vă la exemplul actualizat de mai jos, în care aruncăm o eroare în altfel
clauză. Rețineți aruncă
cuvânt cheie în declarația metodei pentru a indica acest lucru fetchListOfCustomers (_ :)
este o metodă de aruncare.
func fetchListOfCustomers (clienți: [Client]?) aruncă pază accesibilă altceva arunca APIError.APIErrorUnreachable gardian conectat altceva arunca APIError.APIErrorNotConnected păstrați clienți = clienți unde customers.count> 0 else throw APIError.APIErrorNoCustomers
A pază
declarația este la fel de puternică ca o dacă
afirmație. Puteți utiliza legăturile opționale și chiar utilizarea Unde
clauzele introduse în Swift 1.2 sunt permise. Sunt sigur că sunteți de acord că exemplul este ușor de înțeles, eliminând condiționările inutile inutile.
O diferență importantă cu dacă
instrucțiunile reprezintă domeniul de aplicare al variabilelor și al constantelor care sunt atribuite valorilor utilizând o legare opțională. În exemplul de mai sus, clienții
constanta a fost atribuită o valoare utilizând o legare opțională. clienții
constantă este accesibilă din domeniul de aplicare pază
declarația apare în. Acesta este un detaliu important și unul dintre avantajele cheie ale utilizării pază
.
Dacă ați crezut asta pază
a fost o variație simplă a lui Swift dacă
declarație, atunci sper că v-am convins altfel. In timp ce dacă
declarațiile vor continua să fie instrumentul dvs. de alegere în cele mai multe situații, pază
are o serie de avantaje în anumite situații. Acest lucru este valabil mai ales dacă este utilizat în combinație cu manipularea erorilor, care a fost introdus și în Swift 2.