Ho cercato di individuare una guida di transizione per Swift 2, in particolare di cui gli sviluppatori dovrebbero essere a conoscenza quando si esegue la migrazione delle codebase di Swift 1/1.2 su Swift 2. Ovviamente si ha l'assistente di migrazione in Xcode, ma quello copre davvero solo l'asino lavora e non le cose che richiedono un pensiero un po 'più intelligente.Lista di controllo per la migrazione a Swift 2 idiomatico (AKA dove si trova la guida di transizione di Swift 2)?
Sulla base delle risorse sono stato in grado di trovare lo Swift 2, ho messo insieme la seguente lista di controllo:
- try/catch/tiro gestione degli errori - da utilizzare per gli errori recuperabili; rivedere di conseguenza il codice di gestione degli errori. In particolare, controllare tutti gli usi di
NSError
e richiamare i delegati per segnalare gli errori recuperabili. - Utilizzare
enums
conforme aErrorType
per definire i propri errori significativi. - Usa #available per l'accesso API di piattaforma più recenti - controllare l'uso di API contro app distribuzione di destinazione e rivedere di conseguenza
- estensioni di protocollo - spostare quanto più codice possibile in questi per aiutare il riutilizzo. In particolare, le funzioni globali di refactoring nelle estensioni del protocollo.
- annotazioni nullability & generici - rimuovere attacchi ridondante opzionale e tipo fusioni
- Usa
do { }
per controllare la portata e libero grandi risorse primi - spostare vecchie
do { ... } while
loop perrepeat { }
(per rimuovere ambiguità e migliorare la leggibilità) - Usa
guard
per tornare in anticipo ed evitare il rientro eccessivo - Utilizzare
defer
per il codice di pulizia come chiudere i file ecc. - Utilizzare i set di opzioni ratto lei di OR-ing valori insieme (ad es.
viewAnimationOptions = [.Repeat, .CurveEaseIn, .TransitionCurlUp]
) - Review
public
specificatori di accesso che in precedenza erano necessari solo per supportare il test. Utilizzare invece@testable
eimport MyApp
. - movimento singolo caso
switch
dichiarazioni alla nuovaif case .MyEnumCase(let value) = bar() where value != 42 { doThing(value) }
- Utilizza "per ... a" filtro per ripulire
for
loop contenentiif
dichiarazioni filtraggio esempiofor value in mySequence where value != "" { }
- il supporto nativo per i puntatori a funzione C - fornire utilizzando le chiusure o le funzioni globali (non catturare contesto locale quando farlo)
- fissare eventuali nuovi lasciare avvertenze/var
- correggere eventuali avvisi di variabili non utilizzate
- inizializzatori Failable ora può restituire nil prima di chiamare super.init - rimuovere eventuali soluzioni alternative richieste. Gli inizializzatori designati devono ancora inizializzare tutte le proprietà memorizzate prima di restituire comunque zero.
Fonti:
https://developer.apple.com/swift/blog/?id=29
https://developer.apple.com/swift/
https://developer.apple.com/videos/wwdc/2015/?id=106
http://www.raywenderlich.com/108522/whats-new-in-swift-2
Cosa mi sono perso?
Parte del problema è che Swift 2 ha continuato ad evolversi dopo il WWDC. Quindi anche i video WWDC di quest'anno sono potenzialmente obsoleti, o almeno non l'intera storia.
Le cronologie di revisione per [The Swift Programming Language] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/RevisionHistory.html#//apple_ref/doc/uid/TP40014097- CH40-ID459) e [Uso di Swift con Cocoa e Objective-C] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/RevisionHistory.html#//apple_ref/doc/uid/ TP40014216-CH14-ID142) sono buoni posti per cercare anche i cambiamenti dettagliati. –
Ci sono molti altri cambiamenti. La maggior parte delle funzioni globali sono ora diventate metodi di istanza, la stringa non è più enumerabile, alcuni metodi e protocolli sono stati rinominati ecc. Un'ulteriore buona risorsa per vedere i cambiamenti tra 1.2 e 2.0 è http://swiftdoc.org. – MirekE