8 nye måter å refactor din kode med Swift 4

Swift er et av de raskest voksende språkene i historien, på grunn av sin eleganse, enkelhet og "sikkerhet ved design". Faktisk er Swifts offisielle mantra "å gjøre programmering enkle ting enkle og vanskelige ting mulig". I dette innlegget lærer du hvordan du bruker Swift til det fulle ved å refactoring koden din.

Mens mye av kodeoptimaliseringen er implisitt og åpenbart inneholdt i språketes design, er det visse refactoringstrategier som kan gjøre koden mer lesbar, mer pålitelig og bedre å utføre. I denne artikkelen vil du lære åtte måter å refactor koden din med Swift 4. 

Målene i denne artikkelen 

I denne artikkelen vil du lære noen måter å bedre optimalisere og refactor koden din med Swift 4. Vi vil dekke følgende:

  1. håndtere dupliserte nøkler i ordbøker elegant med glidelås
  2. angir standardverdier for ordbøker
  3. slå sammen ordbøker i en
  4. filtrerer dataarkordverdier direkte inn i et annet ordbokobjekt
  5. bruker Codable til å lagre egendefinerte objekter i JSON
  6. bytte verdier i mutable arrays
  7. håndtering av multi-line bokstaver
  8. finne tilfeldige elementer i en samling

1. Dupliser Nøkler i Ordbøker

For det første forbedrer Swift 4 ordbøker med en elegant måte å håndtere dupliserte nøkler ved hjelp av generisk funksjon glidelås.  glidelås fungerer på mer enn bare ordbøker, og faktisk vil det la deg bygge egen sekvenstype fra to underliggende samlinger som samsvarer med sekvensen. 

For eksempel, si at du har en matrise med følgende verdier, og legg merke til to elementer som inneholder samme nøkkel:

la steder = ["Springfield", "Chicago", "Springfield", "Jackson"] var ordbok: ordbok

Ved bruk av  glidelås, du er i stand til å lage en rekke unike par:

la steder = ["Springfield", "Chicago", "Springfield", "Jackson"] var dictionary = Ordbok (zip (steder, repeatElement (1, count: locations.count)), uniquingKeysWith: +) print / ["Jackson": 1, "Chicago": 1, "Springfield": 2]

De uniquingKeysWith elementer i koden ovenfor tillater deg å lage unike verdier ved bruk av en matematisk operatør. I dette tilfellet bruker vi + å øke verdien når en duplikatoppføring er funnet. Selvfølgelig kan du også bestemme å ansette din egen tilpassede inkrementlogikk.

2. Standardverdier for ordbøker 

En annen kraftig funksjon i Swift 4 er i evnen til å angi standardverdier for ordbøker, ved hjelp av et nylig lagt abonnement. I den følgende koden, når du får tilgang til verdien av en nøkkel i ordboken, er verdien returnert en valgfri verdi, som returnerer null hvis nøkkelen ikke eksisterer:

la stederAndPopulations = "Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] print (stederAndPopulations ["Springfield"]) // verdi er valgfri utskrift (stederAndPopulations ["New York"]) // denne nøkkelen eksisterer ikke, returnerer null

Normalt bør du takle muligheten for nil i valgfrie verdier, men Swift 4 gjør det litt mer praktisk for deg, gjennom et nytt abonnement som lar deg legge til standardparametere, i stedet for å tvinge deg til å beskytte eller fjerne opsjoner.

skriv ut (stederAndPopulasjoner ["New York", standard: 0])

I dette tilfellet, siden vi ikke har en oppføring for New York i vår første oppsett, vil den returnere standardparameteren på 0. Du kan også injisere en dynamisk verdi i motsetning til en statisk bokstavelig verdi hvis du trenger det, noe som sikkert gjør for en mye kraftigere subscriptfunksjon. 

3. Slå sammen ordbøker

Swift 4 gjør det også lettere å slå sammen to ordbøker i en gjennom bruk av flette (_: uniquingKeysWith :). I det følgende eksemplet fusjonerer vi den andre ordboken til den første, og ved bruk av den nylig lærte parameteren uniquingKeysWith, Vi kan sikre at eventuelle duplikater skal håndteres hvis de oppstår:

var locationsOndPopulationsIL = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] la location2 = ["Rockford": 152871, "Naperville": 141853, "Champaign": 81055] stederAndPopulationsIL.merge uniquingKeysWith: +) print (locationsAndPopulationsIL)

I fravær av denne funksjonen, må du normalt manuelt krysse alle verdiene i en ordbok og implementere tilpasset logikk ved å slå sammen to ordbøker i en. 

4. Filtrerende ordbok Verdier i en annen ordbok

I tillegg til å slå sammen to ordbøker, kan du også dynamisk filtrere en ordbok med resultatene rettet tilbake til en annen ordbok av samme type. I dette neste kodestykket filtrerer vi ordboken for steder med en bestemt verdi, returnert som en ordbok:

la locationsAndPopulationsIL = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] la filtermillionPlusPopulation = locationsAndPopulationsIL.filter $ 0.value> 1000000 print (filteredmillionPlusPopulation) // ["Chicago": 2705000]

Så, utover enkel filtrering, kan du også gjøre bruk av filter lukking for å gi tilpassede filtre som vil kulminere i et nytt ordbokresultat. 

5. Lagre egendefinerte objekter til JSON

Hvis du noen gang har serialisert (og deserialisert) data før, kan det være ganske involvert, å måtte underklasse klasser med NSObject, så vel som gjennomføring NSCoding. Med Swift 4 kan du serialisere klassene dine mer effektivt ved bruk av Codable. Dette er spesielt nyttig når du vil fortsette å seriere et egendefinert objekt av deg til et JSON-objekt, enten å overføre til en API eller til og med for å fortsette lokalt ved å bruke UserDefaults:

// en klasse for å serialisere klassen Sted: Codable var navn: String var populasjon: Int init (navn: String, populasjon: Int) self.name = name self.population = population // lage en instans la chicago = Plassering (navn: "chicago", befolkning: 2705000) // serialiser til JSON la jsonData = prøv? JSONEncoder () .code (chicago) // deserialiser og utdata hvis la data = jsonData la jsonString = String (data: data, koding: .utf8) print (jsonString!) // "navn": "chicago" befolkning ": 2705000

Som du kan se, ved å sette klassen eller strukturen til Codable, Du kan enkelt serialisere dataene dine til JSON, fortsette dataene et sted, og deserialisere tilbake. 

6. Bytte verdier i mutable arrayer

Bytt til arrays, en annen velkommen funksjon i Swift 4 er evnen til å bytte to verdier direkte i mutable arrays, ved å bruke swapAt (_: _ :). Dette ville være mest nyttig for funksjoner som sorteringsalgoritmer, og det er ekstremt greit å bruke:

var steder = ["Springfield", "Chicago", "Champaign", "Aurora") locations.swapAt (0, 2) print (steder) // ["Champaign", "Chicago", "Springfield", "Aurora" ]

Tidligere ville du måtte bruke midlertidige variabler til å bytte mellom to elementlokaler, men med denne metoden kan du mer kortfattet sortere dine arrayer.

7. Håndtering av multi-line litteraler

Et annet kult tillegg til Swift 4 er evnen til å lagre multiple-line streng-bokstaver i dine verdier, noe som gjør det svært enkelt å bryte ut ditt bokstavelige innhold for å være mer presentabelt. Gjennom bruk av notasjonen """ for å åpne og lukke tekstblokken, kan du opprette innhold med flere linjer og til og med referanse dynamiske variabler, som vist nedenfor når vi dynamisk legger til en dato.

la illinoisIntro = "" "Illinois er en stat i Midtvest-USA. Det er den femte mest folkerike og 25. største staten, og er ofte kjent som en mikrokosmos av landet. Med Chicago og dets forsteder i nordøst, er små industribyer og stor landbruksproduktivitet i sentrale og nordlige Illinois, og naturressurser som kull, tømmer og petroleum i sør, Illinois har en variert økonomisk base og er et viktig transportnav. (Kilde: Wikipedia - Datert (Dato ()) " "" utskrift (illinoisIntro)

8. Plukke tilfeldige elementer i en samling

Nytt i Swift 4.2 er muligheten til å velge tilfeldige elementer i en samling med randomElement funksjon. Faktisk, ikke bare arrays, men noe objekt som samsvarer med Samling protokollen kan gjøre bruk av denne nifty-funksjonen. Følgende eksempel bruker vår plasseringsmatrise, og det vil skrive ut en tilfeldig by fra det aktuelle feltet:

la steder = ["Springfield", "Chicago", "Springfield", "Jackson"] la randomElement = locations.randomElement () print (randomElement!) 

Konklusjon

I denne artikkelen lærte du noen nyttige teknikker som Swift 4 bringer for å skape mer kompakt, fokusert og optimalisert kode. I sin fjerde iterasjon har Swift sikkert gjort fremskritt i å hjelpe deg med å reflektere koden din for å være mer lesbar og pålitelig. Swift 4.x er ikke ferdig ennå, og jeg oppfordrer deg til å følge den offisielle Swift evolusjonssiden for å legge merke til alle de nye forslagene i rørledningen som skal diskuteres.