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.
Î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:
zip
Î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.
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.
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.
Î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.
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.
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.
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)
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!)
Î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.