Gyors | ||
Az első változat kelte | 2014. június 2 | |
---|---|---|
Paradigma | Tárgyorientált , eljárási , imperatív , funkcionális , deklaratív | |
Fejlesztő | Apple és más közreműködők | |
Fejlesztők | Chris Lattner , Doug Gregor, John McCall, Ted Kremenek, Joe Groff és az Apple | |
Utolsó verzió | 5.3.3 (2021. január 25) | |
Fejlesztői verzió | 5.4 | |
Gépelés | Statikus, erős , következtetés | |
Befolyásolta | C-objektív , C # , CLU , Haskell , Python , ütő , rubin , rozsda , Scala és D nyelv | |
Operációs rendszer | Apple rendszerek ( Darwin , iOS , iPadOS , macOS , tvOS , watchOS ), Linux , Windows 10 , Android | |
Engedély | Apache licenc 2.0 verzió | |
Weboldal | swift.org | |
Fájlkiterjesztés | gyors | |
A Swift egy lefordított , több paradigmás objektumprogramozási nyelv , amelynek célja egyszerű, hatékony és biztonságos. Úgy fejlesztették ki a nyílt forráskódú .
A Swift fejlesztési projektet az Apple irányítja , amely szintén a fő hozzájárulás; de a Swift közösség számos tagja, valamint más játékosok, például a Google és az IBM is részt vesznek a fejlesztésben. A Swift hivatalosan támogatott operációs rendszerek Ubuntu , iOS , macOS , watchos és tvOS . Nem hivatalos (közösségi üzemeltetésű) támogatás létezik más Linux platformokon, például a Debianon és a Fedorán .
Hivatalos angol kézikönyv érhető el online.
A Swift együttműködik a C nyelvvel , valamint az Apple platformok Objective-C -jével.
A Swift fordító az LLVM- et használja a gépi kód előállításához.
A Swift fejlesztését 2010-ben Chris Lattner kezdte meg, és számos programozási nyelven rendelkezik forrásokkal, például az Objective-C, a Haskell, a Ruby, a Python, a Caml vagy a C # nyelven. Az első nyilvános verzió (1.0) megjelent2014. június 2a WWDC 2014-en .
Ban ben 2015. június, Az Apple bejelentette a Swift nyelv nyílt forráskódra való átállását a WWDC 2015 során, és ugyanezen év decemberében lép hatályba. Megjelent a Swift 3.0 verzió2016. szeptember. A 4.0 verzió már elérhető2017. szeptember 19és főleg a forráskód szintaxisának stabilitására összpontosít. Az 5.0 verzió már elérhető2019. március 25és főleg az ABI stabilizálódását hozza .
A Swiftet jól fogadták az Apple technológiáihoz szokott fejlesztők. Különösen egyszerűbbnek és tömörebbnek találták, mint a C-objektív.
Egyes fejlesztők bejelentették, hogy teljesen új szoftvereket fejlesztenek a Swift-ben. Így van például Brent Simmons (a MarsEdit és a NetNewsWire fejlesztője), aki bejelentette, hogy a Vesper szoftverének Mac verzióját teljes egészében a Swift fejlesztik majd. A Facebook a Swift támogatást is hozzáadta a Parse-hoz.
Néhány nappal a bemutatása után a Swift elindult a 20 legnépszerűbb programozási nyelv listájába (TIOBE index). Ban ben2014. júliusSwift történt a 16- edik helyet a rangsorban.
A Swift programozási nyelv című könyvet a Swift bejelentése utáni napon több mint 370 000 alkalommal töltötték le a 2014-es WWDC-n.
Az Apple egyértelműen azt állítja, hogy figyelembe veszi a fejlesztői visszajelzéseket a Swift fejlesztése érdekében.
A Swift korai verzióinak egyik fejlesztői kritikája a hozzáférés-módosítók hiánya volt (például azok, amelyek léteznek az Objective-C-ben); Míg az Apple ritkán kommunikál a jövőbeni termékjellemzőkről, az Apple mérnöke válaszol a fejlesztőknek, és bejelentette, hogy a későbbi Swift-frissítések során felveszik őket. A2014. július 21, Az Apple ezeket hozzáadja a Swifthez.
Középső-2014. július, Az Apple a Swift-nek szentelt blogot nyit meg honlapján, amelyben az Apple mérnökei a Swift létrehozásának kulisszái mögött, valamint a nyelvvel kapcsolatos legfrissebb híreket és tanácsokat tárgyalnak.
A 2015. június 8, Az Apple bejelentette, hogy a fordítói kódot és a szabványos könyvtárakat nyílt forráskódú licenc alapján terjesztik .
Az Apple szerint a közösségi hozzájárulásokat elfogadják és ösztönzik.
Mivel 2015. december 3, A Swift már Apache 2.0 licenc alatt érhető el . A nyitott kód tartalmazza a fordítót, a szabványos nyelvi könyvtárakat és a csomagkezelőt.
A Swift hivatalosan támogatott az Apple platformokon, Linuxon ( Ubuntu , CentOS 8 , Amazon Linux 2) és Windowson (az 5.3-as verzió óta).
Nem hivatalos támogatást nyújt az Android , a Linux az ARM architektúrán , a Windows, a WebAssembly és más rendszerek számára. A Swift fejlesztőcsapata bejelentette, hogy hivatalosan támogatni kívánja az új platformokat.
A változókat és az állandókat az információk tárolására használják. Swift támaszok között más típusú Int, Double, Float, Char, Stringés Bool.
VáltozókA Swift a változó típusára következtet, vagyis a létrehozásakor nem szükséges megadni a változó típusát. Szükség esetén lehetőség van kifejezett megadására.
var entierImplicite = 70 var doubleImplicite = 70.0 var floatExplicite: Float = 70 // On précise ici explicitement le type de la variable ÁllandóakAz állandókat fel kell használni minden olyan értékre, amely a program során változatlan marad.
let pi = 3.14159 let deuxPi = 2 * pi Változó nevekSzinte bármilyen Unicode karakterrel meg lehet nevezni egy változót , például:
var fréquentationTourEiffelEn2011 = 7100000 let π = 3.14159 let 你好 = "你好世界" let سعيد" = فرح" let ? = "Triste"A Swift változók, konstansok és egyéb elemei nem tartalmaznak szóközt.
Van többféle állapotok Swift, beleértve if, switchés if let.
Ha feltétel if age >= 18 { print("Vous êtes majeur") } else { print("Vous êtes mineur") }Használható továbbá else if :
if age >= 18 { print("Vous êtes un adulte") } else if age >= 11 { print("Vous êtes un adolescent") } else { print("Vous êtes un enfant") } Kapcsoló állapot switch nombreDeCôtés { case 3: print("Triangle") case 4: print("Quadrilatère") case 5: print("Pentagone") case 6: print("Hexagone") default: print("Nom indisponible pour votre figure") }A Swiftnél biztonsági okokból a kapcsolótípus feltételeknek teljesnek kell lenniük, vagyis minden olyan értéket kezelni kell, amelyet az érintett változó vehet fel. Ahhoz, hogy a váltás teljes legyen, vagy kifejezetten tesztelnie kell a változó összes lehetséges értékét (ha lehetséges, tipikusan olyan felsorolások esetén, amelyeknek csak kevés lehetséges értéke van), vagy hozzá kell adni az alapértelmezett értéket, amelynek utasításait akkor kerül végrehajtásra, ha az előző mezők egyike sem felel meg a tesztelt változó értékének.
Több eredmény egyidejű tesztelése is lehetséges:
switch lettre { case "a","e","i","o","u","y": print("Voyelle") case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z": print("Consonne") default: print("Votre caractère n'est pas listé") } Összehasonlítás a C nyelv kapcsolóvalA C nyelvvel ellentétben nem szükséges minden egyes váltás után hozzáadni a break utasítást: implicit módon jelen van. Ha kifejezetten meg akarjuk reprodukálni C „bukás” viselkedését, használhatjuk az utasítást fallthrough.
Ezenkívül a Swift kapcsolója egy első osztályú vezérlő struktúra, és nem egyenértékű a goto-val, mint a C-ben, ami azt jelenti, hogy alapértelmezés szerint minden doboznak megvan a maga kontextusa.
A Swift-ben többféle hurok létezik, beleértve a while , repeat while és a in in ciklusokat . A körülményekhez hasonlóan a hurokfeltételeket sem kell zárójelekkel körülvenni. A Swift 1.0 óta jelen lévő hurkok " C típusa" eltűnik a Swift 3.0 alkalmazással, mivel feleslegesnek tekintik őket a hurkokhoz képest .
Miközben hurkokBár a hurkok vitathatatlanul a legalapvetőbb hurkok, addig ismételik az utasításokat, amíg feltételük igaz.
// Exemple d'une boucle affichant les nombres de 0 à 99 var i = 0 while i < 100 { print(i) i += 1 } Mert hurkokUgyanis a hurkok kétségtelenül a leggyakoribbak és egyben a legerősebbek a Swiftben, kifejezőképességük mellett javítják a biztonságot (például a végtelen hurkok elkerülésével), valamint a teljesítményt (a nyelv bizonyos memóriaintegritási ellenőrzések nélkül is megteheti).
A típus szintaxisa olyan formát ölt, for élément in séquenceahol élémentaz állandó nevének felel meg, amely a hurok minden fordulatakor hozzárendel egy olyan értéket, séquenceahol séquencelehet tömb, szótár vagy bármilyen más szekvenciális típus.
A következő kód:
let prénoms = ["Victor", "Emmanuel", "Victoria"] for prénom in prénoms { print("Bonjour, \(prénom) !") }Így írnánk a "while" használatával:
let prénoms = ["Victor", "Emmanuel", "Victoria"] var i = 0 while i < prénoms.count { print("Bonjour, \(prénoms[i]) !") i += 1 }Amellett, hogy kifejezőbb, a for in loop elkerüli bizonyos programozási hibákat, például a helytelen index elérését vagy akár egy végtelen hurok létrehozását.
A C ciklushoz hasonlóan a Swift lehetővé teszi a skaláris intervallumon keresztüli iterációt a "..." zárt intervallum operátor használatával:
for i in 1...10 { print("i = \(i)") }Az ismétlés while ciklus (ami egyenértékű más nyelvű do while ciklussal ) lehetővé teszi, hogy a ciklusban szereplő utasításokat legalább egyszer megismételje. Csak az utasítások első végrehajtása után ellenőrizzük a feltételt a ciklus megismétlése érdekében.
// Donnons nous la fonction lancerDé() qui retourne un entier aléatoire en 1 et 6 var valeurDé1: Int var valeurDé2: Int repeat { valeurDé1 = lancerDé() valeurDé2 = lancerDé() print("\(valeurDé1) et \(valeurDé2)") / } while !(valeurDé1 == 6 && valeurDé2 == 6) // Tant qu'on a pas un double sixAz opcionális egy általános típus, amely lehetővé teszi bármely adott típus esetén egy érték vagy az érték hiányának képviseletét. Az opcionális típus deklarálásához a nevét kérdőjellel követjük, például Int?vagy újra Double?. Az opcionális típus használatára példa egy karakterlánc egész számmá alakítása:
let entierOptionel = Int(chaineDeCaractères)Itt az integerOptionel típusa Int?lesz, vagyis választható egész szám , sőt, lehetséges, hogy a karakterláncunk olyan értéke van, amely nem felel meg például egész számnak, "J'aime les crêpes"vagy akár "2,334". Ilyen esetekben nem lehet a karakterláncot egész számra konvertálni, és entierOptionelezért nem lesz értéke, azaz lesz nil. Ha a karakterlánc például átalakítható értéket tartalmazna "12", akkor az átalakítás lehetséges entierOptionellett volna, 12és a példánkban tartalmazna értéket .
A Swift nem engedélyezi az opcionális típus közvetlen használatát, például a következő kód hibát okoz:
// Erreur: Value of optional type 'Int?' must be unwrapped to a value of type 'Int' let résultat = entierOptionel + 10Valóban ki kell bontania az opcionálisat, vagyis kifejezetten hozzá kell férnie az értékéhez az erre a célra előírt sok szintaxis egyikével.
Feltétel if letAz if let feltétel egy olyan feltétel, amely lehetővé teszi a változó értékéhez való hozzáférést, ha van ilyen, kódblokkban:
if let valeur = entierOptionel { print(valeur + 10) } else { print("entierOptionel n'a pas de valeur") } Operátor ??Az operátor ??bizonyos helyeken nagy hely- és olvashatósági megtakarítást tesz lehetővé, így a következő kód:
if let nom = nomAnimalDeCompagnie { print(nom) } else { print("Aucun nom précisé pour votre animal.") }Cserélhető egyetlen sorral:
print(nomAnimalDeCompagnie ?? "Aucun nom précisé pour votre animal.")Bizonyos esetekben teljesen biztosak vagyunk abban, hogy az érték soha nem lesz nil, majd az opcionális érték után hozzáadunk egy felkiáltójelet, amely közvetlen hozzáférést biztosít az értékéhez:
// urlDeWikipedia sera ici de type URL au lieu de URL? let urlDeWikipedia = URL(string: "http://fr.wikipedia.org/")!Az ilyen művelet végrehajtása előtt mindig teljes mértékben meg kell győződnie arról, hogy van-e érték, sőt, a Swift azonnal leállítja a program végrehajtását a megfelelő hibával, ha olyan értéket próbál meg elérni, amely nem létezik.
Összehasonlítás a NULLC-benValahol láthatunk bizonyos hasonlóságot az nilopcionális Swift és a NULLC között.
Bár a C-ben NULLnéha bizonyos funkciók nem képviselnek értéket, a különbség az, hogy NULLcsak a C-ben található mutatókra vonatkozik, míg a Swift-ben bármelyik típus opcionálisá tehető.
Osztály deklarálásával létrehozunk egy új típust társított változókkal (úgynevezett tulajdonságokkal) és függvényekkel (úgynevezett módszerekkel).
Íme egy példa az osztály létrehozására a Swiftben, amely alapvető információkat tárol egy állatról (név és lábszám), és visszaadhatja az állatot leíró karakterláncot (a simpleDescription funkcióval):
class Animal { // Exemple de propriétés var pattes: Int var nom: String // Fonction d'initialisation init(nomEspece: String, nombreDePattes: Int) { self.nom = nomEspece self.pattes = nombreDePattes } // Exemple de méthode func simpleDescription() -> String { return "Cet animal s'appelle \(nom) et il a \(pattes) pattes." } }Egy osztály változóit és állandóit tulajdonságoknak nevezzük; funkcióit nevezzük módszereknek. Minden nem választható tulajdonságnak rendelkeznie kell értékkel az inicializáláskor.