Probabil știți că Swift 3 va veni mai târziu în acest an. Este prima versiune care încorporează munca grea a unei comunități fantastice. Zeci de propuneri au fost depuse, deoarece Apple a deschis Swift în 2015 și zeci au fost acceptate după o analiză atentă de către echipa de bază. În acest articol, aruncăm o privire la unele dintre schimbările importante din Swift 3.
Echipa de bază are un scop foarte clar în mintea cu lansarea Swift 3, creând o bază solidă pentru limbajul de programare Swift. La WWDC 2016, Chris Lattner a subliniat faptul că Swift 3 introduce o serie de schimbări de rupere cu intenția de a obține corectitudinea fundamentală. Aceasta este tema comună a lansării viitoare. Aceasta înseamnă ruperea funcțiilor existente, eliminarea unor caracteristici și îmbunătățirea fundației limbii.
Proiectul Swift evolution a fost o adevarata poveste de succes pentru toti cei implicati in comunitatea Swift. Angajamentul a fost extraordinar și rezultatul este Swift 3. Apple este transparent în legătură cu procesul de lansare și instantanee ale Swift 3 sunt disponibile pe site-ul Swift și sunt incluse în Xcode 8, care este în versiune beta în momentul redactării.
Versiunea Swift 3 nu se concentrează numai pe limbajul de programare Swift, ci include și schimbări substanțiale în lanțul de instrumente, biblioteca standard și interoperabilitatea limbii cu Cocoa. Amintiți-vă că Swift este mai mult decât o limbă. Când vorbim despre Swift, în general, ne gândim doar la limbă, dar include și biblioteca standard și managerul de pachete.
Dacă ați lucrat cu Swift, atunci știi că migrarea unei coduri de bare de la o versiune la alta nu este o faptă mică. Din păcate, migrarea unui proiect la Swift 3 nu va fi diferită.
Acestea fiind spuse, scopul principal al lui Swift 3 este să vă asigurați că tranziția de la Swift 3 la versiunile viitoare ale limbii nu va fi așa. Sursa de compatibilitate este un punct central de focalizare al Swift 3.
Swift a fost conceput pentru a fi un limbaj de programare modern, dar era la fel de important să creezi o limbă care să arate frumos și a fost ... bine ... minunată. Cu Swift 3, echipa continuă să "optimizeze limbajul pentru minunate" așa cum o pune Chris Lattner.
Deși există multe schimbări de rupere, rezultatul net este o limbă care se simte și arată grozav. Swift 3 este o bucurie de folosit. Modificările aduse Core Graphics și Grand Central Dispatch, pe care le discutăm într-un moment, sunt exemple frumoase.
Suficient despre cât de minunat este Swift și cât de mult mai minunat va fi Swift 3. În restul acestui articol, aș dori să mă concentrez asupra unor modificări cheie introduse în Swift 3. Rețineți că Swift 3 continuă să evolueze până la lansarea oficială în cursul acestui an.
O mulțime de timp și energie au fost cheltuite pentru îmbunătățirea API a limbajului Swift. Modificările sunt semnificative, nu există nici o negare a acestui fapt. Dar rezultatul este foarte, foarte frumos. Cu Swift 3, echipa de bază își propune un API care se concentrează pe lizibilitate și accesibilitate.
În timp ce mulți dintre noi s-au obișnuit cu verbozitatea obiectivului C, noul API Swift adoptă o abordare diferită, punând accentul și concentrându-se pe elementele esențiale. Uitați-vă la următorul exemplu de Swift 2.2.1. Acest exemplu ar trebui să pară familiar dacă ați petrecut ceva timp cu Swift ... sau Obiectiv-C.
parentViewController.presentViewController (newViewController, animat: true, completare: nil)
În Swift 3, acest fragment de cod arată puțin diferit, după cum puteți vedea mai jos.
parentViewController.present (newViewController, animat: true, completare: nil)
Comunitatea Swift a realizat că nu este necesar să se includă o referință la ceea ce urmează să fie prezentat, deoarece informațiile respective sunt deja incluse în primul parametru. Ca rezultat, numele metodei devine mai ușor de citit și mai concis. O îmbunătățire clară dacă mă întrebi.
Acesta este un fir comun în Swift 3. Mai multe dintre propunerile care au fost acceptate și incluse în Swift 3 se concentrează pe simplificarea și eliminarea cruftului din limbă. API-ul Swift a fost inițial puternic influențat de natura verbose a obiectivului-C. Capacitatea de citire este minunată, dar Swift 3 reduce din nou verbositatea fără a compromite lizibilitatea.
Comunitatea Swift este de părere că proiectarea unui API ar trebui să ia întotdeauna în considerare utilizarea API și acest lucru este clar vizibil în modificările introduse în Swift 3. Sunt sigur că sunteți de acord că API-ul revăzut și citește-mare.
O altă schimbare importantă pe care mulți dezvoltatori o primesc este semnarea consecventă a funcției și a metodelor, prin includerea în etichetă a primei etichete a parametrilor. Aceasta arata o functie tipica in Swift 2.2.1. În mod prestabilit, prima etichetă de parametru este omisă când funcția este invocată.
func setupView (vizualizare: UIView, cuConfigurationconfiguration: Configuration) // ... setupView (view, withConfiguration: configuration)
Acest lucru nu mai este valabil în cazul lui Swift 3. Primului parametru nu mai este acordat un tratament special, care este o schimbare foarte binevenită.
func setupView (vizualizare: UIView, cuConfigurationconfiguration: Configuration) // ... setupView (vizualizare: view, withConfiguration: configuration)
Din cauza acestei modificări, ați putea îmbunătăți în continuare exemplul de mai sus, prin omiterea trimiterii la vizualizarea din numele funcției.
func setup (vizualizare: UIView, cuConfigurationconfiguration: Configuration) // ... setup (vizualizare: view, withConfiguration: configuration)
Lucrul cu C API-urile din Swift a fost întotdeauna privit și simțit neclintit. Funcțiile Core Graphics, de exemplu, sunt importate ca funcții globale, ceea ce nu este o soluție excelentă și, prin urmare, utilizarea Core Graphics în Swift nu se simte grozavă.
Același lucru este valabil și pentru Dispensarul Grand Central. În exemplul următor, folosim Dispeceratul Central Central pentru a trimite o sarcină asincrone într-o coadă de fundal.
dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) // ...
În Swift 3, API se simte mult mai mult ca un API nativ Swift. Funcțiile sunt importate ca metode, ceea ce duce la următoarea sintaxă din Swift 3.
DispatchQueue.global (atribute: .qosBackground) .async // ...
Comunitatea Swift a fost, de asemenea, de acord cu eliminarea mai multor caracteristici, dintre care unele au declanșat câteva discuții aprinse. Aș dori să subliniez patru dintre ele.
pentru
bucleleAcest lucru ți se pare familiar?
pentru (var i = 0; i < 5; i++) print(i)
C-stil pentru
buclele nu mai sunt disponibile în Swift 3. Așteptați. Ce? De ce? Aceasta este o întrebare foarte bună. Puteți citi propunerea, prezentată de Erica Sadun, despre GitHub. Acest lucru ne aduce la următoarea schimbare controversată.
++
și --
Imediat după deschiderea rapidă a lui Swift, Chris Lattner, creatorul Swift, a prezentat o propunere de eliminare a operatorilor de creștere și reducere a limbajului. În propunerea sa, el menționează că acești operatori au fost adăugați, "fără prea multă atenție", la începutul dezvoltării lui Swift. Pentru a curăța API-ul Swift și pentru a evita orice confuzie, ++
și --
nu mai sunt disponibile în Swift.
var a = 0 a++
Nu te superi, totuși. Soluția este simplă. Nu este nevoie să vă îngrijorați.
var a = 0 a + = 1
var
ParametriiDacă sunteți familiarizat cu funcțiile din Swift, atunci știți că parametrii unei funcții sunt constanți în mod implicit. Puteți schimba acest comportament prin prefixarea unui nume de parametru cu var
cuvinte cheie. Pentru parametrii variabili, o copie variabilă a parametrului este transmisă funcției.
Dar cum diferă aceasta de parametrii marcați ca în afară
? Dreapta. Acesta este exact ceea ce mulți dintre noi s-au mirat și este motivul pentru eliminarea parametrilor variabili din limbă.
Din perspectiva funcției, nu există nici o diferență, adică funcția primește o copie locală mutabilă a valorii parametrului. Din moment ce numele implică însă un parametru marcat ca în afară
își scrie valoarea înapoi la variabila inițială.
Pentru a evita orice confuzie, var
parametrii nu mai sunt disponibili în Swift 3. Din fericire, în afară
parametrii sunt aici pentru a rămâne.
Vorbind despre în afară
parametrii, în Swift 3, în afară
cuvântul cheie este integrat în sintaxa de tip a parametrilor funcției. Consultați următoarele exemple pentru a înțelege mai bine această modificare.
/ / Swift 2 func combineStrings (primul: inut String, al doilea: String) // ...
Chiar dacă Swift este încă foarte tânăr, există multe caracteristici care sunt destul de avansate. Știați că puteți trece o tuplă la o funcție în locul unei liste de parametri? Nu este nevoie să vă înveseliți, totuși. Această caracteristică va fi eliminată în Swift 3.
// Parcurge Argumentele ca Parametri separați let view = UIView () let configuration = Configurație () setupView (view, withConfiguration: configuration) // Parcurge Argumente ca parte a lui Tuple let tuple = (view, withConfiguration: configuration)
Chris Lattner se referă la acest comportament ca "drăguț" în propunerea sa de a elimina caracteristica. Deși acest comportament poate fi util din când în când, pare să aibă câteva consecințe. Motivul pentru ridicarea acestei propuneri este acela de a evidenția obiectivul principal al echipei de bază, simplificând sintaxa și API-ul limbii.
Pot vedea cum această caracteristică părea îngrijită la început, dar, pe măsură ce limbajul a crescut, câștigat în complexitate și mai mulți oameni au început să o folosească, caracteristici ca aceasta adaugă o valoare limitată limbii în schimbul a ceea ce pare a fi o listă de complicații , inclusiv problemele de performanță în timpul compilării și complexitatea cu tipul de verificator care ar putea fi evitate prin omiterea caracteristicii.
Săptămâna trecută, am scris despre Xcode 8. În acest articol am menționat că Xcode 8 suportă atât Swift 2.3 cât și Swift 3. Dar ceea ce este Swift 2.3 și cum se compară cu Swift 2.2?
Swift 2.3 este o actualizare minoră dar importantă a lui Swift. Principala diferență cu Swift 2.2.1, versiunea inclusă în Xcode 7.3.1, este compatibilitatea cu SDK-urile pentru noile sisteme de operare Apple, iOS 10, tvOS 10, watchOS 3 și macOS Sierra (10.12).
Acest lucru înseamnă că puteți utiliza și construi împotriva noilor SDK-uri fără a face saltul la Swift 3. Cu Xcode 8, puteți trimite aplicații la App Store folosind Swift 2.3 sau Swift 3. Echipa Swift cunoaște și înțelege că migrarea către Swift 3 are un impact semnificativ asupra proiectelor existente care includ Swift. Swift 2.3 vă asigură că vă puteți migra proiectele când vi se pare potrivit.
Ceea ce îmi place și despre proiectul Swift este că instrumentele sunt dezvoltate alături de limbă. Acest lucru înseamnă că instrumentele primesc, de asemenea, o actualizare substanțială atunci când Swift 3 este lansat în cursul acestui an.
În timpul WWDC, am văzut deja o privire asupra modificărilor aduse documentației. În timp ce acest lucru poate părea trivial, ați analizat vreodată cât timp cheltuiți navigarea în documentație? Am un punct slab pentru detaliile de acest fel și apreciez efortul depus de echipă pentru a face documentația mai accesibilă. Schimbările sunt și mai dramatic în Xcode 8, așa cum am scris săptămâna trecută.
Deocamdată, marea majoritate a dezvoltatorilor Swift folosesc Xcode ca și loc de muncă. Acest lucru se poate schimba în viitor, deoarece limbajul câștigă tracțiunea pe alte platforme. Google nu intenționează să utilizeze Swift pe Android?
În Xcode 8, integrarea lui Swift este mult îmbunătățită. Navigarea în biblioteca standard, de exemplu, este mai intuitivă. Într-una din sesiunile WWDC 2016, Ewa Matejska ilustrează modul în care interfețele sintetizate sunt acum mai intuitive și mai ușor de înțeles. Aceasta face ca navigarea în biblioteca standard să fie mai puțin descurajantă.
Acest lucru ne duce la compilare și optimizare. S-ar putea să fi auzit de optimizarea întregului modul. Această caracteristică este activată în mod implicit în Xcode. Aceasta afectează performanța aplicațiilor, iar Apple recomandă ca această caracteristică să fie activată în producție. Dacă doriți să aflați mai multe despre optimizarea întregului modul, vă recomand să citiți acest articol de Keith Harrison.
În timp ce optimizarea întregului modul crește timpul de compilare atunci când construiți primul proiect, rezultatele sunt mai mult decât merită. Construcțiile ulterioare sunt mai puțin afectate datorită compilării incrementale.
Swift 3 reprezintă o piatră de hotar majoră pentru toți cei implicați în comunitatea Swift. Chiar dacă nimănui nu-i place să spargă schimbările, direcția pe care o face limba devine tot mai clară, făcând platforma mai robustă și pregătită pentru schimbări viitoare fără a compromite compatibilitatea sursei.
În acest articol, am subliniat câteva dintre cele mai importante schimbări pe care le puteți aștepta în Swift 3. Pentru o listă completă a modificărilor, vă recomand să vizitați ghidul de migrare de pe site-ul Swift.
De asemenea, puteți vizita proiectul Swift evolution pe GitHub pentru a citi mai multe despre propunerile care au fost acceptate și despre cele în curs de elaborare. Nu te speria. Propunerile sunt adesea ușor de înțeles. De fapt, scopul proiectului de evoluție Swift este ca toți să poată adăuga la discuție. Ce te oprește?