8 nuovi modi per rifattorizzare il tuo codice con Swift 4

Swift è una delle lingue in più rapida crescita nella storia, grazie alla sua eleganza, semplicità e "sicurezza dal design". In effetti, il mantra ufficiale di Swift è "rendere la programmazione semplice e le cose difficili possibili". In questo post, imparerai come utilizzare Swift al massimo sfruttando il codice.

Sebbene gran parte dell'ottimizzazione del codice sia implicita e ovviamente inerente al design del linguaggio, esistono alcune strategie di refactoring che possono rendere il tuo codice più leggibile, più affidabile e più performante. In questo articolo imparerai otto modi per ridefinire il tuo codice con Swift 4. 

Obiettivi di questo articolo 

In questo articolo imparerai alcuni modi per ottimizzare e ridefinire meglio il tuo codice con Swift 4. Tratteremo quanto segue:

  1. gestendo le chiavi duplicate nei dizionari elegantemente con cerniera lampo
  2. impostazione dei valori predefiniti per i dizionari
  3. unire i dizionari in uno solo
  4. filtrare i valori del dizionario dati direttamente in un altro oggetto dizionario
  5. usando Codable per salvare oggetti personalizzati in JSON
  6. scambiando valori in matrici mutevoli
  7. gestione di letterali multi linea
  8. trovare elementi casuali in una raccolta

1. Duplica le chiavi nei dizionari

Innanzitutto, Swift 4 migliora ulteriormente i dizionari con un modo elegante di gestire chiavi duplicate utilizzando la funzione generica cerniera lampo.  cerniera lampo funziona su più di un semplice dizionario e infatti ti consente di creare un proprio tipo di sequenza da due raccolte sottostanti conformi a Sequence. 

Ad esempio, supponiamo di avere una matrice con i seguenti valori, prendendo nota di due elementi contenenti la stessa chiave:

let locations = ["Springfield", "Chicago", "Springfield", "Jackson"] dizionario var: Dizionario

Usando  cerniera lampo, sei in grado di creare una sequenza di coppie uniche:

let locations = ["Springfield", "Chicago", "Springfield", "Jackson"] dizionario var = Dictionary (zip (posizioni, repeatElement (1, numero: locations.count)), uniquingKeysWith: +) print (dictionary) / / ["Jackson": 1, "Chicago": 1, "Springfield": 2]

Il uniquingKeysWith gli elementi nel codice sopra permettono di creare valori unici attraverso l'uso di un operatore matematico. In questo caso, usiamo + per incrementare il valore ogni volta che viene trovata una voce duplicata. Naturalmente, puoi anche decidere di utilizzare la tua logica di incremento personalizzata.

2. Valori predefiniti per dizionari 

Un'altra potente funzionalità di Swift 4 è la possibilità di impostare i valori predefiniti per i dizionari, utilizzando un indice appena aggiunto. Nel seguente codice, quando si accede al valore di una chiave nel dizionario, il valore restituito è un opzionale valore, che restituirà nil se la chiave non esiste:

let locationsAndPopulations = ["Springfield": 115715, "Chicago": 2705000, "Aurora": 201110] print (locationsAndPopulations ["Springfield"]) // valore è opzionale print (locationsAndPopulations ["New York"]) // questa chiave non esiste, ritorna nil

Normalmente dovresti gestire la possibilità di zero in valori facoltativi, ma Swift 4 lo rende un po 'più conveniente per te, attraverso un nuovo indice che ti consente di aggiungere parametri predefiniti, piuttosto che forzarti a proteggere o scartare gli optionals.

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

In questo caso, dato che non abbiamo una voce per New York nel nostro array iniziale, restituirà il parametro predefinito di 0. Puoi anche iniettare un valore dinamico invece di un valore letterale statico, se necessario, che certamente rende una funzionalità di pedice molto più potente. 

3. Unione di dizionari

Swift 4 semplifica inoltre l'unione di due dizionari in uno tramite l'uso di merge (_: uniquingKeysWith :). Nell'esempio seguente, stiamo unendo il secondo dizionario al primo e tramite l'uso del parametro appena appreso uniquingKeysWith, possiamo garantire che eventuali duplicati vengano gestiti nel caso in cui si verifichino:

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

In assenza di questa funzione, normalmente dovresti attraversare manualmente tutti i valori di un dizionario e attuare la logica personalizzata per unire due dizionari in uno. 

4. Filtro dei valori del dizionario in un altro dizionario

Oltre a unire due dizionari, puoi anche filtrare dinamicamente un dizionario con i risultati reindirizzati a un altro dizionario dello stesso tipo. In questo snippet di codice successivo, filtriamo il dizionario delle posizioni in base a un valore specifico, restituito come dizionario:

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

Quindi, al di là del semplice filtraggio, puoi anche usare il filtro chiusura per fornire filtri personalizzati che culmineranno in un nuovo risultato di dizionario. 

5. Salva oggetti personalizzati su JSON

Se hai mai serializzato (e deserializzato) i dati prima, può essere abbastanza complicato, dovendo sottoclasse le classi con NSObject, così come l'attuazione NSCoding. Con Swift 4, puoi serializzare in modo più efficiente le tue lezioni attraverso l'uso di codificabile. Ciò è particolarmente utile quando si desidera mantenere la serializzazione di un oggetto personalizzato del proprio in un oggetto JSON, per passare a un'API o persino per mantenere localmente utilizzando UserDefaults:

// una classe per serializzare la classe Location: Codable var name: String var population: Int init (nome: String, popolazione: Int) self.name = nome self.population = population // crea un'istanza lascia chicago = Posizione (nome: "chicago", popolazione: 2705000) // serializza su JSON lascia jsonData = prova? JSONEncoder (). Encode (chicago) // deserializza ed emette if let data = jsonData let jsonString = String (data: data, encoding: .utf8) print (jsonString!) // "name": "chicago", " popolazione ": 2705000

Come puoi vedere, impostando la tua classe o struttura codificabile, puoi serializzare facilmente i tuoi dati su JSON, mantenere i dati da qualche parte e deserializzare di nuovo. 

6. Scambiare valori in matrici mutevoli

Passando agli array, un'altra caratteristica di benvenuto in Swift 4 è la possibilità di scambiare due valori direttamente in matrici mutevoli, utilizzando swapAt (_: _ :). Ciò sarebbe molto utile per funzioni come gli algoritmi di ordinamento ed è estremamente semplice da usare:

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

In precedenza, avresti dovuto fare uso di variabili temporanee per scambiare tra due posizioni di elementi, ma con questo metodo, puoi ordinare più concisamente i tuoi array.

7. Gestione di letterali multilinea

Un'altra interessante aggiunta a Swift 4 è la possibilità di archiviare valori letterali di stringa su più righe nei valori, rendendo estremamente semplice la divulgazione del contenuto letterale per renderlo più presentabile. Attraverso l'uso della notazione """ per aprire e chiudere il blocco di testo, puoi creare contenuti multilinea e persino fare riferimento a variabili dinamiche, come mostrato di seguito quando aggiungiamo dinamicamente una data.

let illinoisIntro = "" "L'Illinois è uno stato nel Midwest degli Stati Uniti, è il 5 ° stato più popoloso e il 25 ° più grande, ed è spesso indicato come un microcosmo del paese, con Chicago e i suoi sobborghi nel nord-est, piccole città industriali e grande produttività agricola nell'Illinois centrale e settentrionale e risorse naturali come carbone, legname e petrolio nel sud, l'Illinois ha una base economica diversificata ed è un importante nodo di trasporto. (Fonte: Wikipedia - Dated \ (Date ()) " "" print (illinoisIntro)

8. Scegliere elementi casuali in una raccolta

Novità di Swift 4.2 è la possibilità di selezionare elementi casuali in una raccolta con randomElement funzione. In realtà, non solo array ma qualsiasi oggetto conforme al Collezione il protocollo può utilizzare questa funzione elegante. L'esempio seguente utilizza la nostra matrice di posizione e stamperà una città casuale da quella matrice:

let locations = ["Springfield", "Chicago", "Springfield", "Jackson"] lasciate randomElement = locations.randomElement () print (randomElement!) 

Conclusione

In questo articolo hai appreso alcune utili tecniche che Swift 4 offre per creare un codice più compatto, mirato e ottimizzato. Nella sua quarta iterazione, Swift ha certamente fatto progressi nell'aiutarti a rifattare il tuo codice per renderlo più leggibile e affidabile. Swift 4.x non è ancora stato fatto, e ti incoraggio a seguire la pagina ufficiale di evoluzione di Swift per prendere nota di tutte le nuove proposte in cantiere da discutere.