Fort | ||
Dato for første versjon | 2. juni 2014 | |
---|---|---|
Paradigme | Objektorientert , prosessuell , imperativ , funksjonell , deklarativ | |
Utvikler | Apple og andre bidragsytere | |
Utviklere | Chris Lattner , Doug Gregor, John McCall, Ted Kremenek, Joe Groff og Apple | |
Siste versjon | 5.3.3 (25. januar 2021) | |
Utviklingsversjon | 5.4 | |
Skrive | Statisk, sterk , inferens | |
Påvirket av | Objective-C , C # , CLU , Haskell , Python , Racket , Ruby , Rust , Scala og D språk | |
Operativsystem | Apple-systemer ( Darwin , iOS , iPadOS , macOS , tvOS , watchOS ), Linux , Windows 10 , Android | |
Tillatelse | Apache-lisens versjon 2.0 | |
Nettsted | swift.org | |
Filutvidelse | fort | |
Swift er en kompilert , multi- paradigme objekt programmeringsspråk som mål å være enkel, effektiv og sikker. Den er utviklet i åpen kildekode .
Swift-utviklingsprosjektet ledes av Apple , som også er hovedbidragsyteren; men mange medlemmer av Swift-samfunnet, så vel som andre spillere, som Google og IBM , er også involvert i utviklingen. Swift støttes offisielt på operativsystemene Ubuntu , iOS , macOS , watchos og tvOS . Uoffisiell (community-run) støtte eksisterer for andre Linux-plattformer, for eksempel Debian og Fedora .
En offisiell engelsk manual er tilgjengelig online.
Swift har interoperabilitet med C-språket så vel som med Objective-C på Apple-plattformer.
Swift- kompilatoren bruker LLVM for å generere maskinkode.
Utviklingen av Swift ble startet i 2010 av Chris Lattner og har sine kilder på mange programmeringsspråk som Objective-C, Haskell, Ruby, Python, Caml eller C #. Den første offentlige versjonen (1.0) ble gitt ut den2. juni 2014på WWDC 2014 .
I juni 2015Apple kunngjør bytte til åpen kildekode for Swift-språket i løpet av WWDC 2015, og det vil tre i kraft i desember samme år. Swift versjon 3.0 utgitt iseptember 2016. Versjon 4.0 er tilgjengelig siden19. september 2017og fokuserer hovedsakelig på stabiliteten til kildekodesyntaksen. Versjon 5.0 er tilgjengelig siden25. mars 2019og gir hovedsakelig stabilisering av ABI .
Swift har blitt godt mottatt av utviklere som er vant til Apple-teknologier. Spesielt fant de det å være enklere og mer kortfattet enn Objective-C.
Noen utviklere har kunngjort at de vil utvikle ny programvare helt i Swift. Dette er for eksempel tilfellet med Brent Simmons (utvikler bak MarsEdit og NetNewsWire), som kunngjorde at Mac-versjonen av hans Vesper-programvare ville bli utviklet helt med Swift. Facebook la også til Swift-støtte til Parse.
Noen dager etter presentasjonen var Swift på vei til å komme inn på listen over de 20 mest populære programmeringsspråkene (TIOBE-indeksen). Ijuli 2014Swift hadde skjedd på 16 th plass i rangeringen.
Boken The Swift Programming Language hadde blitt lastet ned mer enn 370 000 ganger dagen etter kunngjøringen Swift på WWDC 2014.
Apple hevder tydelig å ta tilbakemeldinger fra utviklere for å forbedre Swift.
Én utviklerkritikk av tidlige versjoner av Swift var mangelen på tilgangsmodifikatorer (som de som finnes i Objective-C); Mens Apple sjelden kommuniserer om fremtidige produktfunksjoner, svarer en Apple-ingeniør på utviklere og kunngjør at de vil bli lagt til i fremtidige Swift-oppdateringer. De21. juli 2014, Legger Apple disse til Swift.
Midt-juli 2014, Apple åpner en blogg dedikert til Swift på nettstedet der Apple-ingeniører diskuterer bak kulissene for opprettelsen av Swift, i tillegg til de siste nyhetene og rådene om språket.
De 8. juni 2015, Apple kunngjør at kompilatorkoden og standardbibliotekene vil distribueres under en åpen kildekode- lisens .
Apple sier at samfunnets bidrag vil bli akseptert og oppmuntret.
Siden 3. desember 2015, Swift er nå tilgjengelig under Apache 2.0- lisensen . Åpen kode inkluderer kompilatoren, standard språkbiblioteker og en pakkebehandling.
Swift støttes offisielt på Apple-plattformer, Linux ( Ubuntu , CentOS 8 , Amazon Linux 2) og Windows (siden versjon 5.3).
Støtte gis uoffisielt for Android , Linux på ARM-arkitektur , Windows, WebAssembly og andre systemer. Swift-utviklingsteamet har kunngjort at de offisielt vil støtte nye plattformer.
Variabler og konstanter brukes til å lagre informasjon. Swift støtter blant andre typer Int, Double, Float, Char, Stringog Bool.
VariablerSwift angir typen variabel, det vil si at det ikke er nødvendig å spesifisere typen variabel når du oppretter den. Om nødvendig er det mulig å spesifisere det eksplisitt.
var entierImplicite = 70 var doubleImplicite = 70.0 var floatExplicite: Float = 70 // On précise ici explicitement le type de la variable KonstanterKonstantene skal brukes til enhver verdi som vil forbli uendret under programmet.
let pi = 3.14159 let deuxPi = 2 * pi Variable navnDet er mulig å navngi en variabel med nesten alle Unicode- tegn , for eksempel:
var fréquentationTourEiffelEn2011 = 7100000 let π = 3.14159 let 你好 = "你好世界" let سعيد" = فرح" let ? = "Triste"Navnene på variabler, konstanter og andre elementer i Swift inkluderer ikke mellomrom.
Det er flere typer forhold i Swift, inkludert if, switchog if let.
Hvis tilstand if age >= 18 { print("Vous êtes majeur") } else { print("Vous êtes mineur") }Det er også mulig å bruke 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") } Bytt tilstand 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") }I Swift, av sikkerhetsmessige grunner, må forholdene på brytertypen være uttømmende, dvs. det er nødvendig å håndtere alle verdiene som den aktuelle variabelen kan ta. For at bryteren skal være uttømmende, må du enten eksplisitt teste alle mulige verdier for variabelen (når det er mulig, vanligvis når det gjelder oppføringer som bare har et lite antall mulige verdier), eller ved å legge til standard hvis instruksjoner vil være utført hvis ingen av de foregående boksene tilsvarte verdien av den testede variabelen.
Det er også mulig å teste flere resultater samtidig:
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é") } Sammenligning med C-språkbryterenI motsetning til C-språket er det ikke nødvendig å legge til pauseuttalelsen etter hvert tilfelle av en bryter: den er implisitt til stede. Hvis vi eksplisitt ønsker å reprodusere "fall gjennom" oppførselen til C, kan vi bruke instruksjonen fallthrough.
Videre er Swifts bryter en førsteklasses kontrollstruktur og ikke ekvivalent med en goto som i C, noe som betyr at hver boks har sin egen kontekst som standard.
Det er flere typer løkker i Swift, inkludert mens , gjenta mens og for i . I likhet med forhold trenger sløyfeforhold ikke være omgitt av parenteser. " Type C" for løkker som er til stede siden Swift 1.0 forsvinner med Swift 3.0, da de anses som unødvendige sammenlignet med for i løkker .
Mens løkkerSelv om sløyfer uten tvil er de mest grunnleggende sløyfene, gjentar de sine instruksjoner så lenge deres tilstand er sant.
// Exemple d'une boucle affichant les nombres de 0 à 99 var i = 0 while i < 100 { print(i) i += 1 } For i løkkerFor i sløyfer er utvilsomt de hyppigste og også de kraftigste i Swift, i tillegg til deres ekspressivitet, forbedrer de sikkerheten (ved å unngå for eksempel uendelige sløyfer) så vel som ytelse (språket kan klare seg uten noen hukommelsesintegritetskontroller).
Typesyntaks tar formen for élément in séquencehvor det élémenttilsvarer navnet på konstanten som ved hver sving av sløyfen vil bli tildelt en verdi av et element séquenceder det séquencekan være en matrise, en ordbok eller en hvilken som helst annen sekvensiell type.
Følgende kode:
let prénoms = ["Victor", "Emmanuel", "Victoria"] for prénom in prénoms { print("Bonjour, \(prénom) !") }Ville skrives slik med "while":
let prénoms = ["Victor", "Emmanuel", "Victoria"] var i = 0 while i < prénoms.count { print("Bonjour, \(prénoms[i]) !") i += 1 }I tillegg til å være mer uttrykksfull, unngår for in loop visse programmeringsfeil, slik som tilgang til feil indeks eller til og med å lage en uendelig løkke.
Som en for loop i C, lar Swift deg gjenta over et skalarintervall ved hjelp av lukkede intervalloperatøren "...":
for i in 1...10 { print("i = \(i)") }Gjenta mens sløyfe (tilsvarer en gjør mens sløyfe på andre språk) lar deg gjenta instruksjonene i sløyfen minst en gang. Det er først etter den første utførelsen av instruksjonene at tilstanden blir sjekket for å gjenta sløyfen eller ikke.
// 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 sixEn valgfri er en generisk type som tillater å representere, for en gitt type, en verdi eller fraværet av en verdi. For å erklære en valgfri type følger vi navnet med et spørsmålstegn, for eksempel Int?eller igjen Double?. Et eksempel på bruk av en valgfri type er å konvertere en streng til et helt tall:
let entierOptionel = Int(chaineDeCaractères)Her vil heltallOptionel være av typen Int?, det vil si et valgfritt heltall , faktisk er det mulig at tegnstrengen vår har en verdi som ikke tilsvarer et heltall, for eksempel "J'aime les crêpes"eller til og med "2,334". I slike tilfeller er det ikke mulig å konvertere strengen til et heltall, og entierOptionelvil derfor ikke ha noen verdi, dvs. det vil være nil. Hvis tegnstrengen for eksempel inneholdt en konvertibel verdi, "12"ville konverteringen ha vært mulig og entierOptionelville inneholdt en verdi, 12i vårt eksempel.
Swift tillater ikke å bruke en valgfri type direkte, for eksempel gir følgende kode en feil:
// Erreur: Value of optional type 'Int?' must be unwrapped to a value of type 'Int' let résultat = entierOptionel + 10Du må faktisk pakke ut det valgfrie, det vil si eksplisitt få tilgang til verdien ved hjelp av en av de mange syntaksen som er gitt for dette formålet.
Tilstand if letIf let-tilstanden er en type tilstand som gir tilgang til verdien til en variabel, hvis den inneholder en, i en kodeblokk:
if let valeur = entierOptionel { print(valeur + 10) } else { print("entierOptionel n'a pas de valeur") } Operatør ??Operatøren ??tillater stor plassbesparelse og lesbarhet i visse tilfeller, og dermed følgende kode:
if let nom = nomAnimalDeCompagnie { print(nom) } else { print("Aucun nom précisé pour votre animal.") }Kan erstattes av en enkelt linje:
print(nomAnimalDeCompagnie ?? "Aucun nom précisé pour votre animal.")I noen tilfeller er vi helt sikre på at en verdi aldri vil være nil, vi legger deretter til et utropstegn etter den valgfrie verdien som gir direkte tilgang til verdien:
// urlDeWikipedia sera ici de type URL au lieu de URL? let urlDeWikipedia = URL(string: "http://fr.wikipedia.org/")!Det er alltid nødvendig å være helt sikker på at en verdi faktisk er tilstede før du utfører en slik operasjon, faktisk vil Swift umiddelbart avslutte utførelsen av programmet med riktig feil hvis man prøver å få tilgang til en verdi på denne måten. ' eksisterer ikke.
Sammenligning med NULLi CVi kan se et eller annet sted en likhet mellom nilSwift og NULLC.
Selv om i C NULLnoen ganger tillater at visse funksjoner ikke representerer noen verdi, er forskjellen at det NULLbare gjelder pekere i C mens i Swift kan enhver type gjøres valgfri.
Ved å erklære en klasse, oppretter vi en ny type med tilhørende variabler (kalt egenskaper) og funksjoner (kalt metoder).
Her er et eksempel på klassekreasjon i Swift, den lagrer grunnleggende informasjon om et dyr (navn og antall ben) og kan returnere en streng som beskriver dette dyret (med funksjonen simpleDescription):
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." } }Variablene og konstantene i en klasse kalles egenskaper; dens funksjoner kalles metoder. Alle ikke-valgfrie egenskaper må ha en verdi ved initialiseringstidspunktet.