8 Noi modalități de a reactiva codul dvs. cu Swift 4

Swift este una dintre limbile cu cea mai rapidă creștere din istorie, datorită eleganței, simplității și "siguranței prin design". De fapt, mantra oficială a lui Swift este "de a face programarea lucrurilor simple și lucrurile dificile posibile". În acest post, veți învăța cum să utilizați Swift la maxim, refacând codul.

Deși o mulțime de optimizare a codului este implicită și evident inerentă designului limbajului, există anumite strategii de refactorizare care pot face codul dvs. mai lizibil, mai fiabil și mai performant. În acest articol, veți afla opt moduri de a vă refactor codul cu Swift 4. 

Obiectivele acestui articol 

În acest articol, veți învăța câteva modalități de optimizare și refactorizare mai bună a codului dvs. cu Swift 4. Vom acoperi următoarele:

  1. manipularea chei duplicat în dicționare elegant cu zip
  2. setarea valorilor implicite pentru dicționare
  3. îmbinarea dicționarelor într-una
  4. filtrarea valorilor dicționarului de date direct în alt obiect de dicționar
  5. folosind Codable pentru a salva obiecte personalizate în JSON
  6. valori de swap în matrice mutabile
  7. manipularea literalurilor cu mai multe linii
  8. găsirea elementelor aleatoare într-o colecție

1. Taste duplicate în dicționare

În primul rând, Swift 4 îmbunătățește în continuare dicționarele cu o modalitate elegantă de a gestiona cheile duplicate utilizând funcția generică zip.  zip funcționează pe mai mult decât dicționare și, de fapt, vă va permite să construiți propriul tip de secvență din două colecții de bază care se conformează secvenței. 

De exemplu, spuneți că aveți o matrice cu următoarele valori, luând notă de două elemente care conțin aceeași cheie:

locații = ["Springfield", "Chicago", "Springfield", "Jackson"] var dicționar: Dicționar

Prin utilizarea  zip, puteți crea o secvență de perechi unice:

(zip (locations, repeatElement (1, count: locations.count)), uniquingKeysWith: +) print (dictionar) / / ["Jackson": 1, "Chicago": 1, "Springfield": 2]

 uniquingKeysWith elementele din codul de mai sus vă permit să creați valori unice prin utilizarea unui operator matematic. În acest caz, folosim + pentru a crește valoarea ori de câte ori se găsește o intrare duplicat. Desigur, puteți decide să folosiți logica personalizată a incrementului.

2. Valorile implicite pentru dicționare 

O altă caracteristică puternică în Swift 4 este capacitatea de a seta valorile implicite pentru dicționare, utilizând un indice nou adăugat. În codul următor, când accesați valoarea unei taste din dicționar, valoarea returnată este a facultativ valoare, care va reveni la zero dacă cheia nu există:

lașiAndPopulations = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] print (locationsAndPopulations ["Springfield"]) // value is print optional (locationsAndPopulations ["New York" nu există, se întoarce zero

În mod normal ar trebui să se ocupe de posibilitatea de a zero în valori opționale, dar Swift 4 o face un pic mai convenabil pentru dvs., printr-un nou indice care vă permite să adăugați parametri impliciți, în loc să vă forțați să păstrați sau să dezarhivați opțiunile.

print (locationsAndPopulations ["New York", implicit: 0])

În acest caz, deoarece nu avem o intrare pentru New York în matricea inițială, va reveni la parametrul implicit de 0. Puteți, de asemenea, să injectați o valoare dinamică, spre deosebire de o valoare literală statică, dacă este necesar, ceea ce face pentru o facilitate mult mai puternic subscript. 

3. Îmbinarea dicționarelor

Swift 4 facilitează, de asemenea, îmbinarea a două dicționare într-un singur prin utilizarea lui îmbinare (_: uniquingKeysWith :). În următorul exemplu, vom îmbina cel de-al doilea dicționar în primul și prin utilizarea noului parametru învățat uniquingKeysWith, putem asigura că orice duplicate vor fi tratate în cazul în care apar:

var locationsAndPopulationsIL = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] unquingKeysWith: +) print (locationsAndPopulationsIL)

În absența acestei funcții, ar trebui în mod normal să traversați manual toate valorile unui dicționar și să implementați logica personalizată în îmbinarea a două dicționare într-un singur. 

4. Filtrarea valorilor dicționarului într-un alt dicționar

În plus față de îmbinarea a două dicționare, puteți filtra dinamic, de asemenea, un dicționar cu rezultatele direcționate înapoi într-un alt dicționar de același tip. În acest fragment de cod următor, filtram dicționarul locațiilor cu o valoare specifică, returnat ca dicționar:

permiteți locațiilorAndPopulationsIL = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] permite filtramillionPlusPopulation = locationsAndPopulationsIL.filter $ 0.value> 1000000 print (filteredmillionPlusPopulation)

Deci, dincolo de simpla filtrare, puteți folosi de asemenea filtru închidere pentru a furniza filtre personalizate care vor culmina într-un rezultat nou al dicționarului. 

5. Salvați obiectele personalizate în JSON

Dacă ați dat vreodată serializat (și deseralizat) date, acesta poate fi destul de implicat, având în subclasa clase cu NSObject, precum și implementarea NSCoding. Cu Swift 4, poți serializa mai eficient cursurile tale prin utilizarea Codable. Acest lucru este util în special atunci când doriți să persistenți prin serializarea unui obiect personalizat al dvs. într-un obiect JSON, fie să treceți la un API, fie să persistați local utilizând UserDefaults:

// o clasă pentru a serializa clasa Locație: Codable var nume: String var populație: Int init (nume: String, populație: Int) self.name = nume self.population = populație // crea o instanță let chicago = Locație (nume: "chicago", populație: 2705000) // serializează JSON lasă jsonData = încercați? JSONEncoder () codificați (chicago) // deserializați și ieșiți dacă permiteți date = jsonData lăsați jsonString = String (date: data, encoding: .utf8) print (jsonString!) // "name" populație ": 2705000

După cum puteți vedea, setând clasa sau structura la Codable, vă puteți serializa cu ușurință datele dvs. în JSON, puteți persista datele undeva și puteți deserializa înapoi. 

6. Schimbarea valorilor în tablouri mutabile

Trecerea la matrice, o altă caracteristică de întâmpinare în Swift 4 este capacitatea de a schimba două valori direct în tablouri mutabile, utilizând swapAt (_: _ :). Acest lucru ar fi foarte util pentru funcții precum algoritmii de sortare și este extrem de ușor de utilizat:

("Champaign", "Chicago", "Springfield", "Aurora"] locații. ]

Anterior, ar fi trebuit să folosiți variabile temporare pentru a schimba între două locații de elemente, dar cu această metodă puteți să vă sortați mai atent matricele.

7. Manipularea literalurilor cu mai multe linii

Un alt plus cool pentru Swift 4 este abilitatea de a stoca literaluri de șir cu mai multe linii în valorile dvs., făcându-l extrem de ușor să scoți conținutul literal pentru a fi mai prezent. Prin utilizarea notatiei „““ pentru a deschide și a închide blocul de text, puteți crea conținut multi-line și chiar variabile dinamice de referință, după cum se arată mai jos, atunci când adăugăm dinamic o dată.

Illinois este statul din Midwestern Statele Unite, este cel de-al 5-lea cel mai populat și cel mai mare stat 25, și este adesea remarcat ca un microcosmos al țării, cu Chicago și suburbiile sale în nord-est, mici orașe industriale și o mare productivitate agricolă în Illinois central și nordic, precum și resurse naturale cum ar fi cărbuni, lemn și petrol în sud, Illinois are o bază economică diversă și este un important centru de transport. (Sursa: Wikipedia - Data (Data) "" print (illinoisIntro)

8. Alegerea elementelor aleatoare într-o colecție

Noua în Swift 4.2 este abilitatea de a alege elemente aleatorii într - o colecție cu randomElement funcţie. De fapt, nu doar matrice, ci orice obiect care este conform cu Colectie protocolul poate folosi această funcție minunată. Următorul exemplu folosește matricea locației noastre și va tipări un oraș aleatoriu din acea matrice:

permiteți locațiilor = ["Springfield", "Chicago", "Springfield", "Jackson"] lasă randomElement = locations.randomElement () print (randomElement!) 

Concluzie

În acest articol, ați învățat câteva tehnici utile pe care Swift 4 le aduce pentru a vă ajuta să creați un cod mai compact, mai concentrat și optimizat. În cea de-a patra iterație, Swift a făcut cu siguranță pași în a vă ajuta să vă refaceți codul pentru a fi mai lizibil și mai fiabil. Swift 4.x nu este încă realizat și vă încurajez să urmați pagina oficială a evoluției Swift pentru a lua notă de toate noile propuneri în curs de dezbatere. 

Cod