Programare în Swift. Dar totuși, de ce să creăm o nouă limbă dacă cea veche funcționa? Calități personale importante

miden16 10 iunie 2014 la 13:06

Limba Programare rapidă. Versiunea rusă

  • Dezvoltare pentru iOS,
  • Rapid

Bună, Habr! Pe 2 iunie, am putut vedea cu toții cu ochii noștri cum este compania Apple a început creați o revoluție în tabăra dezvoltatorilor Objective-C prin introducerea lumii în noul lor limbaj de programare - Swift. Totodată, ea a pus la dispoziția publicului o mică documentație despre limbă, pe care am decis să o traducem dacă va fi cerere. Vă prezentăm atenției o traducere a primului capitol. Dacă subiectul este interesant, vom continua să publicăm traducerea în fiecare săptămână.

Ghid de limbă
Cele elementare
Operatori de bază
Șiruri și caractere
Tipuri de colecție
Controlul fluxului
Funcții
Închideri
Enumerări
Clase și Structuri
Proprietăți
Metode
Indicele
Moştenire
Inițializare
Deinițializarea
Numărarea automată a referințelor
Înlănțuire opțională
Tip Casting
Tipuri imbricate
Extensii
Protocoale
generice
Operatori avansati

Limbă de referință
Despre limbajul de referință
Structura lexicală
Tipuri
Expresii
Declarații
Declarații
Atribute
Modele
Parametri și argumente generice
Rezumatul Gramaticei
Mărci comerciale

Bun venit la Swift

Despre limba Swift
Swift este un nou limbaj de programare pentru Dezvoltare iOSși aplicațiile OS X, care combină cele mai bune din C și Objective-C fără limitările compatibilității C Swift utilizează modele de programare sigure și adaugă funcții moderne care fac procesul de creare a unei aplicații mai ușor, mai flexibil și mai distractiv. Creat de la zero de noi, Swift este o oportunitate de a reimagina modul în care sunt dezvoltate aplicațiile.

Swift este în dezvoltare de câțiva ani. Baza noului limbaj de programare a fost compilatorul, depanatorul și cadrele existente. Am simplificat gestionarea memoriei cu contorizarea automată a referințelor (ARC). Cadrele noastre au suferit, de asemenea, modernizări majore. Objective-C a început să susțină blocuri, literale și module - toate acestea au creat condiții favorabile pentru introducerea tehnologiilor moderne. Această lucrare pregătitoare a servit drept fundație pentru un nou limbaj de programare care va fi folosit pentru a dezvolta viitoare produse software pentru Apple.

Dezvoltatorii Objective-C vor găsi Swift familiar. Combină lizibilitatea parametrilor numiți cu puterea modelului de obiect dinamic al Objective-C. Deschide cadrele existente Cocoa și este compatibil cu codul scris în Objective-C. Construit pe această bază comună, limbajul oferă multe caracteristici noi și unifică procedurale și bazate pe obiecte aspecte orientate limbaj de programare.

Nici Swift nu va speria programatorii începători. Acesta este primul limbaj puternic programare care este la fel de clară și distractivă ca un limbaj de scripting. Acceptă așa-numitele locuri de joacă, care permit programatorilor să experimenteze cu codul, văzând rezultatul în timp real fără a fi nevoiți să compileze și să ruleze aplicația.

Swift încorporează cele mai bune limbi moderne și este dezvoltat ținând cont de experiența vastă a Apple. Compilatorul nostru este sinonim cu performanța, iar limbajul nostru este optimizat pentru dezvoltare fără compromisuri. Este conceput astfel încât să puteți dezvolta cu ușurință prima aplicație „bună, lume!” și chiar un întreg sistem de operare. Toate acestea fac din Swift un instrument important pentru dezvoltatori și pentru Apple însuși.

Swift este o nouă modalitate fantastică de a crea aplicații pentru iOS și OS X și vom continua să o dezvoltăm cu mai multe noua functionalitateși introducerea de noi oportunități. Scopul nostru este ambițios. Și abia așteptăm să vedem ce poți crea cu el.

Introducere în Swift
Conform unei tradiții de lungă durată, primul program într-o nouă limbă ar trebui să afișeze pe ecran cuvintele „Bună ziua, lume”. Cu Swift se procedează astfel:

Println("Bună, lume")
Dacă ați dezvoltat vreodată în C sau Objective-C, această sintaxă ar trebui să vă sune ciudat de familiară - în Swift, această linie de cod este un program complet. Nu mai trebuie să importați biblioteci separate pentru a oferi funcționalități de bază, cum ar fi I/O console sau manipularea șirurilor. Codul scris în domeniul global este punctul de intrare în program, astfel încât funcția principală nu mai este necesară. De asemenea, rețineți că nu există punct și virgulă la sfârșitul fiecărei linii.

Această introducere oferă suficiente informații pentru a începe să codificați în Swift. Nu vă faceți griji dacă există ceva ce nu înțelegeți - vom explica totul în detaliu în capitolele următoare.

cometariu
Pentru o mai bună înțelegere a materialului, vă recomandăm să folosiți modul loc de joacă în Xcode. Playground vă permite să vedeți rezultatele imediat pe măsură ce editați codul, fără a fi nevoie să compilați și să rulați aplicația.
Tipuri simple de date
Utilizați let pentru a crea o constantă și var pentru a crea o variabilă. Tipul constantei nu trebuie să fie specificat, îi puteți atribui o valoare o singură dată.

Var myVariable = 42 myVariable = 50 las myConstant = 42
Tipurile unei constante și ale unei variabile trebuie să se potrivească cu tipurile valorilor corespunzătoare care le sunt atribuite. Cu toate acestea, acest lucru nu înseamnă că trebuie să specificați direct tipul lor. Compilatorul va determina automat tipul de constantă și variabilă atunci când le atribuie o valoare. Deci, în exemplul de mai sus, compilatorul va determina că myVariable este un tip întreg.

Dacă inițializatorul lipsește sau nu oferă suficiente informații, puteți specifica singur tipul după variabilă, separând numele și tipul cu două puncte:

Fie implicitInteger = 70 let inplicitDouble = 70.0 let inplicitDouble: Double = 70

Să experimentăm
Creați o constantă cu tipul Float și inițializați-o cu numărul 4.

Valorile nu sunt niciodată convertite implicit într-un alt tip. Dacă trebuie să convertiți o valoare într-un alt tip, faceți-o în mod explicit:
let label = "Lățimea este " let width = 94 let widthLabel = etichetă + String(lățime)
Să experimentăm
Încercați să eliminați conversia explicită în String din ultima linie. Ce eroare vei primi?

Există o modalitate mai ușoară de a include valori în șiruri de caractere: includeți expresia în paranteze și precedați-le cu o bară oblică inversă (\). Exemplu:

Let apples = 3 let oranges = 5 let appleSummary = "Am \(mere) mere." let fruitSummary = "Am \(mere + portocale) bucăți de fructe."

Să experimentăm
Încercați să utilizați construcția \() și să imprimați un șir care include rezultatul sumei a două variabile întregi și numele cuiva.

Când lucrați cu matrice și matrice asociative (dicționare), se folosesc paranteze drepte ():

Var shoppingList = ["somn", "apă", "lalele", "vopsea albastră"] shoppingList = "sticlă de apă" var ocupations = [ "Malcolm": "Căpitan", "Kaylee": "Mecanic", ] ocupații ["Jayne"] = "Relații cu publicul"
Pentru a crea o matrice sau un dicționar gol, utilizați următoarea sintaxă:

Let emptyArray = String() let emptyDictionary = Dicţionar ()
Pentru a crea matrice și dicționare goale, utilizați și respectiv [:] - de exemplu, când atribuiți o nouă valoare unei variabile sau treceți un argument unei funcții.

ShoppingList = // A fost la cumpărături și a cumpărat totul.

Condiții și cicluri
Instrucțiunile If și switch sunt folosite pentru a crea condiții, iar instrucțiunile for-in, for, while și do-while sunt folosite pentru a crea bucle. În acest caz, nu este necesară evidențierea condițiilor și inițializarea expresiilor cu paranteze, în timp ce sunt necesare acolade.

Fiți individualScores = var teamScore = 0 pentru scor în individualScores ( dacă scor > 50 ( teamScore += 3 ) else ( teamScore += 1 ) ) teamScore
Condiția din interiorul instrucțiunii if trebuie să fie booleană, ceea ce înseamnă în mod specific că instrucțiunea if score (...) este o eroare deoarece nu există o comparație explicită (de exemplu, cu zero).

Declarația if poate fi folosită împreună cu let și var pentru a lucra cu constante și variabile care pot avea o valoare zero. Astfel de constante și variabile sunt numite opționale (adică pot lua orice valoare sau pot fi egale cu zero). Pentru a crea o variabilă sau o constantă opțională, adăugați un semn de întrebare (?) după tip.

Var optionalString: String? = „Salut” optionalString == nil var optionalName: String? = "John Appleseed" var salut = "Bună ziua!" if let name = optionalName ( salut = "Bună ziua, \(nume)" )

Să experimentăm
Schimbați opționalName în nil . Ce vezi pe ecran? Adăugați un bloc else pentru a gestiona cazul în care optionalName este nil .

Dacă valoarea opțională este nil , condiția va fi falsă și codul din acolade după if nu va fi executat. În caz contrar, variabilei de salut i se va atribui o nouă valoare.

Comutatorul cu opțiuni multiple acceptă mulți alți operatori de comparație în sine și nu se limitează la comparații simple:

Let vegetable = "ardei roșu" comutați legume ( case "telina": let vegetableComment = "Adăugați niște stafide și faceți furnici pe un buștean." case "castraveți", "creson": let vegetableComment = "Asta ar fi un sandviș cu ceai bun ." case let x where x.hasSuffix("piper"): let vegetableComment = "Este un \(x) picant?" implicit: let vegetableComment = "Totul are gust bun în supă." )

Să experimentăm
Încercați să eliminați condiția implicită. Ce eroare vei primi?

După executarea blocului de cod corespunzător, programul părăsește instrucțiunea switch fără a verifica condițiile ulterioare. În acest fel, nu trebuie să adăugați manual instrucțiuni break la sfârșitul fiecărui bloc de caz.

Pentru a itera elementele unui tablou asociativ, utilizați instrucțiunea for-in împreună cu specificarea unei perechi de nume pentru fiecare pereche cheie-valoare.

Fie interestingNumbers = [ "Prime": , "Fibonacci": , "Square": , ] var cel mai mare = 0 pentru (tip, numere) în InteresingNumbers ( pentru numărul în numere ( dacă număr > cel mai mare ( cel mai mare = număr ) ) ) cel mai mare

Să experimentăm
Adăugați o altă variabilă care vă va permite să aflați care dintre cele trei tipuri este numărul maxim găsit.

Operator buclă while permite executarea unui bloc de cod din el până când condiția devine falsă. Condiția poate fi specificată și după bloc, care în acest caz se va executa conform macar o singura data.

Var n = 2 în timp ce n< 100 { n = n * 2 } n var m = 2 do { m = m * 2 } while m < 100 m
Instrucțiunea for poate fi folosită pentru a itera pe o secvență de numere folosind două puncte (..) sau folosind un inițializator, o condiție și un increment. Uite, aceste două bucle fac același lucru:

Var firstForLoop = 0 pentru i în 0..3 ( firstForLoop += i ) firstForLoop var secondForLoop = 0 pentru var i = 0; i< 3; ++i { secondForLoop += 1 } secondForLoop
Când creați o buclă, utilizați două puncte (..) dacă nu doriți să includeți valoarea mai mare în interval și trei puncte (...) pentru a include atât valorile mai mici, cât și cele mai mari.

Funcții și închideri.
Pentru a declara funcțiile utilizați cuvânt cheie func. O funcție este apelată prin specificarea numelui și a unei liste de argumente între paranteze. Tipul returnat trebuie separat de lista formală de argumente folosind -> .

Func greet(nume: String, day: String) -> String ( returnează "Bună ziua \(nume), astăzi este \(ziua)." ) greet("Bob", "Marți")

Să experimentăm
Eliminați parametrul zi. În schimb, adăugați o variabilă care indică numele felului de mâncare servit la prânz.

Dacă o funcție returnează mai multe valori, ar trebui să utilizați un tuplu:

Func. getGasPrices() -> (dublu, dublu, dublu) ( return (3,59, 3,69, 3,79) ) getGasPrices()
Funcțiile pot avea și un număr nedefinit de argumente:

Func sumOf(numbers: Int...) -> Int ( var sum = 0 pentru numărul în numere ( sum += number ) return sum ) sumOf() sumOf(42, 597, 12)

Să experimentăm
Scrieți o funcție care vă permite să găsiți media aritmetică a unui număr arbitrar al argumentelor sale.

Funcțiile pot fi imbricate unele în altele. O funcție imbricată poate accesa variabilele declarate în functie externa. Utilizați funcții imbricate pentru a aranja codul unei funcții complexe sau mari.

Func returnFifteen() -> Int ( var y = 10 func add() ( y += 5 ) add() return y ) returnFifteen()
Funcțiile sunt obiecte din prima clasă (tip de primă clasă), cu alte cuvinte, o funcție poate returna o altă funcție ca rezultat.

Func makeIncrementer() -> (Int -> Int) ( func addOne(number: Int) -> Int ( return 1 + number ) return addOne ) var increment = makeIncrementer() increment(7)
O funcție poate lua, de asemenea, o altă funcție ca unul dintre argumentele sale.

Func hasAnyMatches(listă: Int, condiție: Int -> Bool) -> Bool (pentru elementul din listă (dacă condiția (articolul) ( returnează adevărat ) ) returnează fals ) func lessThanTen (număr: Int) -> Bool ( returnează numărul< 10 } var numbers = hasAnyMatches(numbers, lessThanTen)
Funcțiile sunt un caz special de închideri. Puteți crea o închidere fără a specifica un nume și în jurul corpului închiderii acolade(()). Pentru a separa argumentele și tipul de returnare din corpul închiderii, utilizați operatorul in.

Numbers.map(( (număr: Int) -> Int în let rezultat = 3 * număr returnează rezultat ))

Să experimentăm
Rescrieți închiderea astfel încât să returneze zero pentru toate numerele suplimentare.

Există mai multe tehnici pentru a face închiderile mai concise. Dacă tipul de închidere este cunoscut a priori (de exemplu, este un apel invers al unui delegat), puteți omite specificarea tipului parametrilor săi și/sau tipul valorii returnate. Închiderile constând dintr-o singură expresie returnează implicit rezultatul acelei expresii.

Numbers.map(( număr în 3 * număr ))
Într-o închidere, în loc să specificați numele variabilei, puteți folosi numărul său ordinal - acest lucru este util în special atunci când scrieți scurtcircuite. Închiderea, care este ultimul argument al funcției, îi poate fi transmisă imediat după paranteze cu lista parametrilor rămași.

Sortare() ($0 > $1)

Obiecte și clase
Pentru a crea o clasă, utilizați clasa de cuvinte rezervată. Membrii clasei sunt declarați în același mod ca constantele și variabilele obișnuite. Mai mult, metodele de clasă sunt declarate ca funcții obișnuite.

Forma clasei ( var numberOfSides = 0 func simpleDescription() ->

Să experimentăm
Adăugați o constantă de membru de clasă și o metodă de clasă care o ia drept argument.

Pentru a crea o instanță (obiect) a unei clase, trebuie doar să adăugați paranteze după numele clasei. Metodele și membrii clasei sunt accesați printr-un punct.

Var shape = Shape() shape.numberOfSides = 7 var shapeDescription = shape.simpleDescription()
În acest exemplu, am omis un detaliu important - constructorul clasei, metoda init.

Clasa NamedShape ( var numberOfSides: Int = 0 var name: String init(name: String) ( self.name = name ) func simpleDescription() -> String ( returnează „O formă cu \(numberOfSides) laturi.” ) )
Observați cum membrul clasei nume este separat de argumentul constructorului de nume de către sine. Argumentele sunt transmise constructorului în mod normal, ca la orice altă metodă de clasă. Rețineți că fiecare membru al clasei trebuie să fie inițializat, fie atunci când este declarat (cum ar fi numberOfSides), fie în constructor (cum ar fi numele).

Destructorul de clasă este metoda deinit, care poate fi suprascrisă dacă este necesar.

Pentru a moșteni o clasă dintr-o clasă existentă, după ce ați specificat numele clasei copil, adăugați două puncte și indicați numele clasei părinte. În Swift, nu există restricții privind moștenirea obligatorie a oricărei clase standard.

Metodele suprascrise de o clasă copil trebuie să fie marcate cu cuvântul cheie override - suprascrierea metodelor fără override va duce la o eroare. Compilatorul detectează, de asemenea, metodele care sunt marcate ca suprascrie, dar nu înlocuiesc nicio metodă din clasa lor părinte.
class Square: NamedShape ( var sideLength: Double init(sideLength: Double, name: String) ( self.sideLength = sideLength super.init(name: name) numberOfSides = 4 ) func area() -> Double ( return sideLength * sideLength ) override func simpleDescription() -> String ( return "Un pătrat cu laturile lungimii \(sideLength)." ) ) let test = Square(sideLength: 5.2, nume: "pătratul meu de testare") test.area() test.simpleDescription ()

Să experimentăm
Creați o clasă Circle și moșteniți din clasa NamedShape. Constructorul clasei Circle ia două argumente: rază și nume. Ignorați zona și descrieți metodele acestei clase.

Membrii clasei pot avea, de asemenea, propriul lor getter și setter.

Clasa Triunghi Echilateral: NamedShape ( var sideLength: Double = 0.0 init(sideLength: Double, nume: String) ( self.sideLength = sideLength super.init(name: name) numberOfSides = 3 ) var perimetru: Double ( get ( return 3.0 * sideLength ) ) set ( sideLength = newValue / 3.0 ) ) override func simpleDescription() -> String ( return "Un triunghi echilateral cu laturile de lungime \(sideLength)." ) ) var triunghi = EquilateralTriangle(sideLength: 3.1, nume: "un triunghi ") triunghi.perimetru triunghi.perimetru = 9,9 triunghi.laturaLungime
În setatorul variabilei perimetru, noua valoare atribuită se numește implicit newValue . Puteți schimba numele acestei variabile punând-o în paranteze imediat după set .

Observați structura constructorului clasei EquilateralTriangle. Această metodă include trei pași succesivi:

  1. inițializarea membrilor unei clase de copii;
  2. apelarea constructorului clasei părinte;
  3. modificarea valorilor membrilor clasei părinte.
Dacă trebuie să executați un anumit cod înainte sau după alocarea unei noi valori unei variabile, puteți suprascrie metodele willSet și didSet pentru a se potrivi nevoilor dumneavoastră. De exemplu, clasa de mai jos garantează că lungimea laturii unui triunghi va fi întotdeauna egală cu lungimea laturii unui pătrat.

Clasa TriunghiAndPătrat ( var triunghi: EquilateralTriangle ( willSet ( square.sideLength = newValue.sideLength ) ) var square: Square ( willSet ( triangle.sideLength = newValue.sideLength ) ) init(size: Double, nume: String) ( square = Square( sideLength: size, name: name) triangle = EquilateralTriangle(sideLength: size, name: name) ) var triangleAndSquare = TriangleAndSquare(size: 10, name: "other test shape") triangleAndSquare.square.sideLength triangleAndSquare.triangle.sideLength triangle.AndSquare pătrat = Square(sideLength: 50, nume: „pătrat mai mare”) triangleAndSquare.triangle.sideLength
Metodele de clasă au una diferenta importanta din funcții. Numele argumentelor unei funcții sunt folosite numai în cadrul acelei funcție, în timp ce într-o metodă de clasă, parametrii sunt utilizați și la apelarea acelei metode (cu excepția primului parametru). În mod implicit, o metodă de clasă are aceleași nume de parametri atât atunci când este apelată, cât și în ea însăși. Cu toate acestea, puteți specifica un nume diferit (în exemplul de mai jos - ori), care va fi folosit numai în cadrul acestei metode. În acest caz, pentru a apela această metodă, trebuie să utilizați prenumele (numberOfTimes).

Class Counter ( var count: Int = 0 func incrementBy(amount: Int, numberOfTimes ori: Int) (count += amount * times ) ) var counter = Counter() counter.incrementBy(2, numberOfTimes: 7)
Când lucrați cu valori opționale, adăugați un semn de întrebare (?) înaintea metodelor, a membrilor clasei etc. Dacă valoarea de dinaintea semnului de întrebare este nil , orice după semnul (?) este ignorat și întreaga expresie este nil . În caz contrar, expresia este evaluată ca de obicei. În ambele cazuri, întreaga expresie va avea ca rezultat o valoare opțională.

Lăsați opționalSquare: Square? = Square(sideLength: 2,5, nume: "opțional pătrat") let sideLength = optionalSquare?.sideLength

Enumerări și Structuri
Cuvântul cheie enum este folosit pentru a crea enumerări. Rețineți că enumerările pot conține și metode.

Enum Rank: Int (case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String ( switch self (case .Ace: return " ace" case .Jack: returnează "jack" case .Queen: return "queen" case .King: return "king" implicit: return String(self.toRaw()) ) ) ) let ace = Rank.Ace let aceRawValue = as .toRaw()

Să experimentăm
Scrieți o funcție care compară 2 enumerari de rang pe baza valorilor lor.

În exemplul de mai sus, elementele enumerate sunt inițial de tip întreg și trebuie doar să specificați valoarea primului element - valorile elementelor rămase vor fi determinate în funcție de ordinea în care apar. La fel de tip original(valoare brută) a valorilor elementului, puteți alege și tipuri de șir sau reale.

Pentru a converti tipul de valoare original într-un tip de enumerare, utilizați funcțiile toRaw și fromRaw.

Dacă lăsați convertedRank = Rank.fromRaw(3) ( lăsați threeDescription = convertedRank.simpleDescription() )
Rețineți că valorile elementelor de enumerare sunt reale și nu doar o altă reprezentare a valorilor lor originale. În general, nu trebuie să specificați valorile lor originale.

Enum Suit ( case Spades, Hearts, Diamonds, Clubs func simpleDescription() -> String ( switch self ( case .Spades: return "spades" case .Hearts: return "hearts" case .Diamonds: return "diamonds" case .Clubs: return "cluburi" ) ) ) let hearts = Costum.Hearts let heartsDescription = hearts.simpleDescription()

Să experimentăm
Adăugați o metodă Color care returnează șirul „negru” pentru Spade și Trece și „roșu” pentru Inimi și Diamante.

Observați cum este accesat membrul Hearts din enumerarea Suit. Când atribuim o valoare constantei inimi, folosim numele complet Suit.Hearts deoarece nu specificăm în mod explicit tipul constantei. Iar în switch folosim forma scurtă .Hearts deoarece tipul valorii de sine este cunoscut a priori. Puteți utiliza formularul scurt atâta timp cât tipul variabilei este specificat în mod explicit.

Cuvântul cheie struct este folosit pentru a crea structuri. Structurile au multe asemănări cu clasele, inclusiv metode și constructori. Una dintre cele mai semnificative diferențe dintre structuri și clase este că instanțele de structuri, spre deosebire de instanțele de clase, sunt transmise funcțiilor prin valoare (adică, copia lor locală este creată mai întâi), în timp ce instanțele de clase sunt transmise prin referință.

Struct Card ( var rank: Rank var suit: Suit func simpleDescription() -> String ( return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" ) ) let threeOfSpades = Card(rank: . Trei, costum: .Spades) let threeOfSpadesDescription = threeOfSpades.simpleDescription()

Să experimentăm
Adăugați o metodă la structura Cărților care creează un pachet complet de cărți.

O instanță de membru de enumerare poate avea propriile valori și pot fi diferite. Atribuiți aceste valori atunci când instanțiați enumerarea (constanta de succes din exemplu). Valorile legate și inițiale sunt lucruri diferite: valoarea inițială a unui membru al enumerației este întotdeauna constantă în toate instanțele enumerației și este specificată atunci când este declarată.

Să luăm în considerare un exemplu de primire a orelor de răsărit și apus de la un server. Serverul răspunde fie cu informații relevante, fie cu un mesaj de eroare.

Enum ServerResponse ( case Result(String, String) case Error(String) ) let success = ServerResponse.Result("6:00 am", "8:09 pm") let failure = ServerResponse.Error("Out of cheese." ) switch success ( case let .Result(sunrise, sunset): let serverResponse = "Răsăritul este la \(răsăritul) și apusul este la \(apusul)." case let .Eroare (eroare): let serverResponse = "Eșec.. .\(eroare)" )

Să experimentăm
Adăugați o a treia opțiune la o declarație switch cu alegere multiplă

Observați cum orele răsăritului și apusului sunt extrase din obiectul ServerResponse.
Protocoale și extensii.
Pentru a declara un protocol, utilizați cuvântul cheie protocol.

Protocol ExempluProtocol ( var simpleDescription: String ( get ) mutating func adjust() )
Protocoalele pot fi susținute de clase, enumerări și structuri.

Clasa SimpleClass: ExampleProtocol ( var simpleDescription: String = "O clasă foarte simplă." var anotherProperty: Int = 69105 func adjust() ( simpleDescription += " Acum 100% ajustat." ) ) var a = SimpleClass() a.adjust( ) let aDescription = a.simpleDescription struct SimpleStructure: ExampleProtocol ( var simpleDescription: String = "O structură simplă" mutating func adjust() ( simpleDescription += " (ajustat)" ) ) var b = SimpleStructure() b.adjust() let bDescription = b.simpleDescription

Să experimentăm
Creați o enumerare care va implementa acest protocol.

Observați cuvântul cheie mutant din definiția SimpleStructure, care spune compilatorului că metoda corespunzătoare modifică structura. În schimb, metodele clasei SimpleClass nu trebuie să fie marcate ca mutante, deoarece metodele clasei o pot schimba întotdeauna fără interferențe.

Pentru a adăuga noi metode sau membri de clasă la un tip existent, trebuie să utilizați extensii. De asemenea, puteți utiliza extensii pentru a implementa deja protocolul tip existent, chiar dacă este importat dintr-o bibliotecă sau cadru.

Extensie Int: ExampleProtocol ( var simpleDescription: String ( return "The number \(self)") ) mutating func adjust() (self += 42 ) ) 7.simpleDescription

Să experimentăm
Creați o extensie de tip Double cu o variabilă membru absoluteValue .

Puteți utiliza numele protocolului ca orice alt tip - de exemplu, pentru a crea o matrice de obiecte de diferite tipuri, dar implementând protocol comun. Rețineți că atunci când lucrați cu obiecte de acest tip, metodele declarate în afara protocolului nu vor fi disponibile.

Lăsați protocolValue: ExampleProtocol = a protocolValue.simpleDescription // protocolValue.anotherProperty // Anulați comentariul pentru a vedea eroarea
Chiar dacă variabila protocolValue este de tipul SimpleClass în timpul execuției, compilatorul presupune că tipul ei este ExampleProtocol . Aceasta înseamnă că nu veți putea accesa accidental metode sau membri ai clasei care sunt implementate în afara ExampleProtocol.

Tipuri generice
Pentru a crea un tip generic, includeți numele între paranteze unghiulare (<>).

Func repetare (articol: ItemType, ori: Int) -> ItemType ( var rezultat = ItemType() pentru i în 0.. ori ( rezultat += item ) returnează rezultat ) repeat("knock", 4)
Creați funcții generice, clase, enumerări și structuri.

// Reimplementați tipul opțional al bibliotecii standard Swift OptionalValue (case Niciun caz Some(T) ) var posibilInteger: OptionalValue = .Nimic posibilIntreg = .Celeva(100)
Dacă doriți să specificați cerințe specifice pentru un tip generic, cum ar fi implementarea unui protocol sau solicitarea acestuia să moștenească de la o anumită clasă, utilizați where .

Func anyCommonElements (lhs: T, rhs: U) -> Bool ( pentru lhsItem în lhs ( pentru rhsItem în rhs ( dacă lhsItem == rhsItem ( returnează adevărat ) ) ) ) return false ) anyCommonElements(, )

Să experimentăm
Modificați funcția anyCommonElements pentru a returna o matrice de elemente comune.

În cazuri simple, puteți omite unde și puteți scrie protocolul sau numele clasei după două puncte. Expresie este echivalent cu expresia .

După cum sa menționat deja de mai multe ori, inclusiv de către , conferința a fost excelentă, chiar dacă nu a fost prezentat niciun hardware la ea. Numai produsele software au fost suficiente. Cât de mult a plăcut publicului conferința este dovedit de faptul că în urma acesteia nu s-a întâmplat nimic notabil, tradițional pentru astfel de cazuri.

Și în timp ce mare parte din ceea ce a fost prezentat era destul de așteptat de public, limbajul de programare s-a dovedit a fi o adevărată surpriză. La urma urmei, nimeni nu a bănuit măcar că Apple lucrează în această direcție. Cu toate acestea, limbajul de programare nu este iPad-ul. Aceasta înseamnă că păstrarea secretului a fost mult mai ușoară.

Cel mai secret proiect

De fapt, lucrul la Swift a început în 2010, după prezentarea iPad-ului. Compania a dorit să creeze un instrument simplu, convenabil și funcțional, care ar putea face viața cât mai ușoară posibil pentru dezvoltatori.

Lucrarea a fost efectuată cu cea mai strictă încredere. Mai mult decât atât, pentru o perioadă destul de lungă, doar o singură persoană a lucrat la proiect - Chris Lattner, directorul departamentului Instrumente pentru dezvoltatori. Desigur, personalul a trebuit ulterior extins. Dar totuși, numărul acestor oameni nu a fost niciodată suficient de mare. Puțini oameni știau despre dezvoltarea unui nou limbaj, chiar și în interiorul zidurilor Apple, deși până în 2013 era considerat cel mai important proiect de instrumente pentru dezvoltatori. Este important de menționat că compania a dorit să se prezinte imediat produs finit, evitând tot felul de versiuni beta. Prin urmare, lucrările s-au întins până în 2014.

Aici ar fi potrivit să vorbim puțin despre însuși Lattner. A venit la Apple în 2005, înainte de a lucra în beneficiul proiectului LLVM la Universitatea din Illinois, fiind unul dintre dezvoltatorii de top.

LLVM ( Nivel scăzut Mașină virtuală) - nivel scăzut mașină virtuală, sistem universal transformarea, optimizarea și analiza programelor. Proiectul a început ca un proiect independent, dar ulterior a primit sprijin extern semnificativ. Inclusiv de la Apple însuși, care apoi a folosit activ LLVM în propriile proiecte, inclusiv OS X și iOS. Același metal a fost dezvoltat folosind acest sistem.

LLVM nu a putut fi evitat nici în cazul lui Swift. Folosind acest sistem, limbajul este compilat într-un cod de mașină care este optimizat pentru a obține beneficii maxime atunci când utilizați aplicația pe tehnologia Apple.

La un moment dat, mutarea lui Chris Lattner la Apple a fost un pas mai mult decât logic. Nu mai puțin logică a fost decizia de a-i încredința dezvoltarea unei noi limbi. Este prea devreme pentru a da un verdict final, dar se pare că a făcut o treabă grozavă.

Caracteristicile lui Swift

Creația celor mai recente dezvoltări, limbajul de programare orientat pe obiecte compilat Swift se bazează pe limbaje precum Objective-C și C, reunind cele mai bune dintre ele. Nu există restricții în ceea ce privește compatibilitatea limbilor pot coexista perfect într-o singură aplicație. Acesta din urmă, apropo, este foarte important, deoarece există deja un număr mare de programe scrise în Objective-C.

Interesant este că ideea vagă a lui Swift a apărut în zilele lui NeXT, când Objective-C tocmai începuse să fie dezvoltat. Atunci s-a născut ideea de a crea un limbaj care ar putea face procesul de programare mai simplu și mai distractiv. Dar, după cum vedem, a fost nevoie de mult timp pentru a implementa această idee.

De fapt, nu este atât de ușor să găsești acea linie atunci când codul este suficient de simplu de tastat, dar în același timp suficient de lizibil pentru ca un dezvoltator terță parte să înțeleagă fragmente din programul altcuiva fără comentarii. De exemplu, un program scris în Pascal este ușor de înțeles, dar codul este prea lung. PERL vă permite să scrieți totul în câteva rânduri, dar se caracterizează printr-un cod extrem de ilizibil.

Între timp, unii dezvoltatori care au încercat deja Swift în practică susțin că Apple a reușit să se apropie cât mai mult de ideal, să găsească acel mijloc de aur între lizibilitate și ușurință de tastare.

După cum reiese imediat din numele noii limbi ( „swift” - engleză. "rapid, rapid"), accentul principal în timpul creării sale a fost pe viteză. În special, se afirmă că un program din Swift va rula de 1,3 ori mai rapid comparativ cu unul similar scris în Objective-C.

De asemenea, la dezvoltarea Swift, s-au luat în considerare parametri atât de importanți precum simplitatea, securitatea și flexibilitatea. Acest limbaj elimină clase întregi de coduri nesigure și este capabil să gestioneze automat memoria. Swift elimină însăși posibilitatea de a face o serie de greșeli atât de comune în rândul programatorilor începători. În ceea ce privește simplitatea, este bine confirmat de faptul că în 24 de ore de la moment, este deja pe el.

Creatorii au depus mult efort pentru a face codul Swift mai expresiv și mai ușor de înțeles. Dezvoltatorul poate urmări imediat rezultatele creativității sale prin vizualizarea părților individuale ale codului în așa-numitul. „locuri de joacă interactive” (Interactive Playgrounds). Dacă este nevoie de destul de mult timp pentru a executa codul, atunci puteți monitoriza procesul pe o linie specială de feedback care apare în acest scop. După ce codul a fost îmbunătățit și algoritmul a fost perfecționat, dezvoltatorul pur și simplu îl mută în proiectul său. Locurile de joacă pot fi utile nu numai în ceea ce privește simplificarea procesului de dezvoltare, ci și pentru a-ți ascuți abilitățile Swift.

O aplicație tradițională „Hello, World” arată astfel în Swift:

println("Bună, lume")

Și iată un alt exemplu de cod simplu:

lasa merele = 3
lasa portocale = 5
let appleSummary = "Am \(mere) mere."
let fruitSummary = "Am \(mere + portocale) bucăți de fructe."

Critica lui Swift

Între timp, pe internet apar și opinii în mod deschis negative cu privire la Swift. Există îngrijorări că aceasta este o cale de dezvoltare fără fund și Swift nu va putea niciodată să devină popular. La urma urmei, chiar și înainte de aceasta, au existat multe limbaje de programare care au fost create tocmai cu scopul de a ușura viața programatorilor și de a simplifica procesul de învățare. Și niciunul dintre ei nu a făcut față pe deplin sarcinilor care i-au fost atribuite. Tot ceea ce creatorii lor au reușit să obțină a fost pur și simplu să mărească numărul deja considerabil de limbaje de programare.

Există critici la adresa acțiunilor Apple, care „ar fi mai bine să dezvolte limbaje precum Python sau Ruby, în loc să creeze un altul”. Astfel de cuvinte sunt susținute de opinia că aceste instrumente sunt deja utilizate în mod activ de dezvoltatorii din întreaga lume. Mi s-a întâmplat să găsesc și o părere conform căreia Apple face degeaba principalul pariu pe viteză. Ca, când niveluri moderne dezvoltarea fierului nu este atât de importantă.

Dar ceea ce provoacă cea mai mare iritare este faptul (ca întotdeauna în astfel de cazuri) că Apple a creat ceva doar pentru sine, după propriile standarde și pe propriile sale principii. Mai mult, se afirmă că, deși Swift nu este foarte diferit de multe alte limbi, compania declară din nou crearea unui produs fundamental nou.

În loc de postfață

Se poate critica Apple pentru că este prea închis și arogant. Puteți admira simplitatea Swift și curățenia codului său. Dar rămâne faptul că viitorul noului limbaj de programare este încă neclar. Și două scenarii de dezvoltare sunt posibile.

Scenariul unu. Swift rămâne doar o dezvoltare interesantă. Este folosit, dar nu prea activ, preferând să lucreze în continuare cu obiectivul-C dovedit și familiar. Dezvoltatorii pentru alte platforme nu observă deloc apariția unui nou limbaj.

Scenariul doi. Abordările utilizate în Swift devin norma în lumea programării. Apple reușește din nou să influențeze întreaga lume schimbând normele general acceptate în rândul dezvoltatorilor. Ideea de „locuri de joacă”, împreună cu transparența codului noului limbaj, poate revoluționa foarte bine învățarea programarii. Și acest lucru ne va permite să reconsiderăm complet întregul proces educațional și să provocăm apariția unei noi generații de programatori.

Apropo, nu m-ar mira dacă în câțiva ani, după ce a „lustruit” temeinic Swift, aducând-o la perfecțiune, Apple declară că intenționează să renunțe cu totul la Objective-C și să se bazeze pe un nou limbaj.

Folosesc tehnologia Apple încă din „epoca clasică”, din 1995. În această perioadă, am văzut mai mult de o „revoluție” bruscă și semnificativă (și uneori de-a dreptul șocantă) în dezvoltarea companiei. Care, în ciuda tuturor, nu și-a pierdut farmecul. Cred că așa va fi în continuare.

Nu cu mult timp în urmă, binecunoscuta companie Apple a introdus un nou limbaj de programare numit Swift. Un nou limbaj pentru dezvoltarea de programe pe IOS și OS X, care a absorbit cele mai bune calități ale strămoșilor săi, și anume limbajele C și Objective-C, în timp ce le-a lăsat deoparte principalele neajunsuri.

După cum a spus Apple, limbajul a fost creat aproape de la zero și folosește modele de programare sigure funcții moderne, ceea ce ar trebui să facă procesul de creare a aplicațiilor mai rapid și mai simplu [desigur, dacă înțelegeți cum trebuie create aceste aplicații în general].

Apropo, voi spune că limbajul a apărut pe 2 iunie 2014, iar multe site-uri IT [cum ar fi HUB] au reușit deja să discute toate avantajele, dezavantajele și așa mai departe ale acestui limbaj. Întreaga evaluare a fost de acord că această limbă este foarte interesantă și demnă de învățat.

Acest articol este un fel de introducere în limbajul Swift, deoarece intenționez să scriu mai multe lecții despre el, așa că dacă ești interesat de el, îl vom studia cu tine.

Din păcate, sau poate din fericire, nu există surse normale, în limba rusă, din care să puteți învăța această limbă. Pentru că, după cum știe toată lumea, 90% din informații sunt lansate pe piața în limba engleză și, deși sunt traduse în rusă, își vor pierde deja relevanța, așa că singura modalitate de a ține pasul cu vremurile este să citești cărți în limba engleză.

Ceea ce este exact ceea ce plănuiesc să fac. Nu cu mult timp în urmă am terminat o carte uriașă despre limbajul C și m-am gândit să trec la Objective-C, dar mi-am dat seama că în curând își va pierde relevanța [dacă nu complet, atunci într-o anumită parte], așa că alegerea a căzut pe Swift.

Bun venit la Swift

După cum se dovedește, Swift a fost în lucru de câțiva ani și este posibil să fi fost conceput pe vremea lui Jobs. Apple a pus bazele limbajului în procesul de promovare a infrastructurii compilatorului, depanatorului și cadru. Sistemul de gestionare a memoriei a fost simplificat semnificativ folosind contorizarea automată a referințelor.

Datorită Objective-C, care a început să accepte blocuri, literale și module, a devenit posibilă crearea unei tehnologii moderne de limbaj. Datorită acestei fundații, Apple a reușit să creeze un nou limbaj care va deveni viitorul tuturor dezvoltării de software pentru Apple.

Acei oameni (dezvoltatori) deja familiarizați cu Objective-C vor găsi Swift destul de familiar, deoarece combină o bună citire a parametrilor cu puterea modelului de obiect dinamic al strămoșului său. Pentru mulți, va fi o mare bucurie că Swift este compatibil cu Objective-C și poate fi încorporat în codul său. Construit pe o bază comună, Swift oferă multe caracteristici și unifică aspectele procedurale și orientate pe obiecte ale limbajului.

Din fericire pentru noi, cei care vrem să învețe să programăm în Swift, limba este destul de prietenoasă și nu necesită un IQ de peste 200 pentru a o stăpâni. Acesta, după cum spun dezvoltatorii, este primul limbaj care are suficientă putere și, în același timp, este la fel de interesant și simplu ca un limbaj de scripting [sau așa cum este numit și limbaj de scripting].

Există suport pentru teren de joacă, care este foarte greu de tradus adecvat, dar dacă explici în cuvinte simple- acesta este suport pentru o funcție care vă permite să vedeți aplicația (programul) pe care o creați fără a compila și rula proiectul.

A absorbit tot ce este mai bun din toate limbajele de programare și întreaga cultură și experiență a inginerilor Apple. Compilatorul XCode combină calitatea și performanța ridicată, iar limbajul este optimizat maxim pentru dezvoltator, fără niciun compromis.

Se așteaptă ca scrierea primului tău program (și anume „Hello, World”) să fie la fel de ușoară ca și scrierea unui întreg sistem de operare. Toate acestea fac din Swift viitorul dezvoltării pentru Apple și întreaga lume.

Swift este mod fantasticîn scrierea unei aplicații pentru iOS și OS X. Scopul limbajului este ambițios și suntem încântați să vedem ce puteți crea cu el!

Limbajul de programare rapid - Apple

Atât, cred că este suficient pentru introducere. Am încercat să traduc în mod adecvat introducerea dintr-o carte în limba engleză despre această limbă, în același timp diluând-o cu fraze de la mine, sper că nu a ieșit rău. Dacă sunteți interesat de această limbă, atunci abonați-vă la actualizările blogului și începeți să învățați această limbă cu mine - mult succes tuturor.

Swift este un limbaj de programare incredibil de puternic și simplu, introdus de Apple în 2014, care deschide ușa multor programatori pentru a crea aplicații pentru iOS, macOS, Apple TV și Apple Watch. Această limbă ideile moștenite de la Objective-C, Rust, Haskell, Ruby, Python, C# și CLU. Folosește modele de programare sigure și conține noi funcții pentru a face programarea distractivă și interesantă. Creat de Chris Lattner, este fiabil, rapid și limbaj deschis, ceea ce face și mai ușoară crearea de aplicații pentru cel mai popular telefon din lume.

Swift este un limbaj de programare modern, cu o versiune de lansare stabilă, care este destul de ușor de învățat, chiar dacă considerați că este prima ta limbă. Previne o mulțime de erori în etapa de compilare, accelerează procesul de dezvoltare și îmbunătățește calitatea codului.

Filosofie rapidă

Principala filozofie a limbii este simplitatea, viteza și securitatea. Pragul de intrare s-a schimbat la latura mare, în comparație cu același Obiectiv C - chiar și fără a cunoaște alte limbaje de programare sau elemente de bază, poți începe în siguranță să înveți limbajul.

Apple a simplificat pe cât posibil limbajul pentru dezvoltatori: sintaxa a devenit mai curată, ceea ce crește lizibilitatea codului atât pentru programatorii experimentați, cât și pentru cei începători. Cantitatea totală de cod a scăzut, rezultând o productivitate crescută. Toate metodele care au fost utilizate în Obiectivul C au fost complet reproiectate, regândite și rescrise.

Unde se folosește Swift?

Dezvoltatorii folosesc acest limbaj de programare pentru a scrie aplicatii mobile pentru telefoane, ceas inteligentși computerele Apple. A existat chiar și un zvon că Google vrea să transfere Android complet pe Swift, orice se poate întâmpla. Acest limbă universală, care poate fi folosit în orice platformă de la compania Cupertino.

Important este că în toamna lui 2016, Apple a facilitat deschiderea unui centru de învățare pentru studenți, unde oricine poate învăța cum să programeze aplicații iOS. Dar asta nu este tot în state, Swift este deja inclus în curriculum-ul multor instituții de învățământ de vârf. Acest limbaj de programare are un potențial uriaș.

Dificultatea de a învăța Swift

Swift este un limbaj sigur care vă va proteja de majoritatea greșelilor din procesul de programare. Vă va spune unde este eroarea și de ce programul nu se compila. Dar, pe de altă parte, aici există o tastare strictă. Limbajul Apple este neiertător.

În prezent, există puțină documentație disponibilă în comparație cu alte limbi. Dar acest lucru se poate explica prin faptul că limbajul a fost lansat recent și a devenit un proiect Open Source, deoarece la momentul lansării putea fi folosit doar de acei dezvoltatori care aveau un program activ. Abonament Apple Program pentru dezvoltatori.

Chiar și mai devreme s-ar putea spune că Swift nu este foarte popular și există un număr mic de biblioteci și extensii de la terți, dar acum nu este deloc așa. Există zeci de soluții excelente de la dezvoltatori terți pe GitHub și pe Internet care vă vor ajuta la îmbunătățirea proiectului.

Swift Avantaje/Dezavantaje

Acest limbaj de programare modern și puternic are o serie de avantaje care îl deosebesc de altele sau de același Objective-C. Și acestea sunt noi capabilități de limbaj puternice, tastare de date extrem de strictă, sintaxă mai concisă, performanță semnificativ mai mare în operațiunile de acces la colecții (sortare și căutare), suport pentru o anumită majoritate a constructelor sintactice moderne existente în alte limbi de nivel înalt programare. Și una dintre principalele caracteristici ale Swift este că este complet compatibil cu Objective-C. Astfel, acest lucru vă permite să rescrieți treptat proiecte dintr-o limbă în alta și, de asemenea, face posibilă utilizarea funcționalității Objective-C în Swift în sine.

Unul dintre lucrurile frumoase este Playground - acesta este un fel de sandbox interactiv în care un dezvoltator poate scrie cod și poate vedea imediat rezultatul muncii sale. Acest lucru vă permite să creșteți viteza de scriere a proiectului principal de mai multe ori, deoarece scrierea unor bucăți individuale de cod sau algoritmi poate fi acum efectuată în terenul de joacă cu feedback vizual, fără riscul de a face greșeli în proiectul principal.

Apple a reluat o mulțime de lucruri, oferindu-ne un sistem avansat de enumerare practic nou, o gestionare eficientă a accesoriilor și o colectare automată a gunoiului optimizată.

Partea întunecată a limbii este popularitatea sa scăzută și prevalența scăzută. Majoritatea proiectelor actuale sunt scrise în Objective-C și vor trebui menținute, iar multe companii nu își rescriu proiectele mari pur și simplu pentru că este un proces uriaș și incredibil de consumator de timp.

Tehnologii înrudite

Apple a făcut tranziția de la utilizarea bibliotecilor statice la cele dinamice și a adăugat această funcționalitate limbajului său de programare, ceea ce înseamnă că evoluează mai rapid decât iOS însuși. Acum dezvoltatorii își pot prezenta cu ușurință aplicația împreună cu bibliotecile pe care le-au scris. Anterior, trebuia să așteptați o nouă lansare iOS, dar acum situația s-a schimbat. Biblioteci dinamice oferă oportunitatea pentru îmbunătățiri și modificări de cod mai flexibile decât oricând.

Swift este un limbaj mai funcțional și mai accesibil care, la fel ca Objective-C, acceptă cadrele oficiale Cocoa și Cocoa Touch. Există multe proiecte open source disponibile online, inclusiv de la: companii mari precum Airbnb, care vă permit să utilizați toate metodele și soluțiile moderne atunci când scrieți cod.

Swift este fiabil și intuitiv limbaj clar programare de la Apple, cu care poți crea aplicații pentru iOS, Mac, Apple TV și Apple Watch. Oferă dezvoltatorilor o libertate creativă fără precedent. Cu acest limbaj open source simplu, ușor de utilizat, tot ce aveți nevoie este o idee interesantă pentru a crea ceva incredibil.

Dezvoltatorii folosesc deja
caracteristici uimitoare ale Swift.

Swift este un limbaj de programare rapid, eficient, în timp real, care poate fi inserat cu ușurință în codul Objective-C pre-construit. Acum dezvoltatorii pot nu numai să scrie cod mai fiabil și mai sigur, ci și să economisească timp și să creeze aplicații cu capabilități avansate.

Aplicație grozavă în Swift. Ușurința de utilizare și capacitatea de răspuns în timp real este motivul pentru care VSCO a ales Swift pentru a crea o nouă versiune a aplicației foto iOS.

Aplicații excelente,
dezvoltat în limbajul Swift.

Din ce în ce mai mulți dezvoltatori încorporează codul Swift în aplicațiile lor. Și unii chiar creează aplicații complet noi în Swift.

Duolingo Khan
Ghid pentru cerul senin al Academiei

Procreează Kickstarter Eventbrite Hipmunk

Productivitatea este mai mare. Aplicațiile sunt mai bune.

Aplicațiile Swift depășesc așteptările. De exemplu, algoritmul obișnuit de căutare rulează mult mai rapid în Swift.

Până la 2.6 ori mai rapid decât Obiectivul-C

Până la 8.4 ori mai rapid decât Python 2.7

10.000 de numere întregi au fost găsite în grafic utilizând algoritmul de căutare în profunzime*

A fost adăugat un limbaj rapid
în curriculum.

Nu doar dezvoltatorii apreciază potențialul limbajului Swift. Universitățile și alte instituții de învățământ predau Swift la cursuri de programare și publică cursuri gratuite pe iTunes U, ceea ce înseamnă că chiar și începătorii pot trece cu ușurință de la codificare de bază la programare de nivel profesional.

Universități care au inclus Swift în programa lor

  • Universitatea din California din Santa Cruz
  • Colegiul Foothill
  • Universitatea Regală de Tehnologie din Melbourne
  • Universitatea Tehnică din München
  • Colegiul Comunitar Lawson
  • Colegiul Comunitar din Manhattan
  • Colegiul Comunitar Mesa
  • Colegiul Comunitar din Houston
  • Colegiul Comunitar Central Piemont
  • Universitatea din Plymouth
  • Universitatea Politehnică de Stat din California
  • Universitatea Stanford
  • Colegiul Tehnic Northwest Kansas
  • Institutul Tehnologic din Monterrey
  • Universitatea Aberystwyth
  • Universitatea Full Sail
  • Scoala Ingesup
  • Universitatea Metodistă de Sud

Swift este peste tot.
Și acum este deschis tuturor.

Swift este disponibil gratuit pentru utilizare de către dezvoltatori, profesori și studenți sub licența de software open source Apache 2.0. Noi oferim fișiere binare pentru OS X și Linux, care vă permite să compilați cod pentru iOS, OS X, watchOS, tvOS și Linux. Și pentru a accelera dezvoltarea Swift într-un limbaj și mai puternic, am creat o nouă comunitate în care utilizatorii pot contribui direct la codul sursă Swift.

Faceți cunoștință cu Swift.

cartea principală

Descărcați tutorialul Limbajul de programare rapid din Apple Books Store gratuit. Aflați cum Swift face programarea mai convenabilă, mai flexibilă și mai distractivă.

Xcode

Xcode este o aplicație pentru Mac concepută pentru dezvoltarea altor aplicații pentru Mac și iOS. Xcode are toate instrumentele de care aveți nevoie pentru a crea aplicații uimitoare. Poate fi descărcat gratuit din Mac App Store.

Site-ul dezvoltatorului

Obțineți informații tehnice detaliate și verificați revizuire completă Limbă rapidă. Consultați blogul dezvoltatorului pentru a rămâne la curent. cele mai recente știri. Ai si tu acces liber la resurse excelente: tutoriale, videoclipuri și exemple de cod.