Schnell (Programmiersprache)
![]() Logo | |
Paradigma | Multi-Paradigma: Protokollorientiert, objektorientierter, funktional, Imperativ, Block strukturiert, deklarativ, gleichzeitig |
---|---|
Entworfen von | Chris Lattner, Doug Gregor, John McCall, Ted Kremenek, Joe Groff und Apple Inc.[1] |
Entwickler | Apple Inc. und Open-Source-Mitwirkende |
Erstmals erschienen | 2. Juni 2014[2] |
Stabile Version | 5.6.2[3] ![]() |
Vorschau -Version | 5.7 Zweig (und Swift 6 Coming) |
Disziplin tippen | Statisch, stark, gefolgert |
OS | Apples Betriebssysteme (Darwin, iOS, iPados, Mac OS, tvos, Watchos), Linux, Windows 10, Android |
Lizenz | Apache -Lizenz 2.0 (Swift 2.2 und später) Proprietär (bis Swift 2.2)[4][5] |
Dateiname -Erweiterungen | .Swift, .Swift |
Webseite | |
Beeinflusst von | |
Ziel c,[6] Rost, Haskell, Rubin, Python, C#, Clu,[7] D[8] | |
Beeinflusst | |
Rost[9] |
Schnell ist ein allgemeiner Zweck, Multi-Paradigma, zusammengestellt Programmiersprache entwickelt von Apple Inc. und Die Open-Source-Community. Swift wurde 2014 erstmals veröffentlicht und wurde als Ersatz für die frühere Programmiersprache von Apple entwickelt Ziel c, wie Objective-C seit den frühen 1980er Jahren weitgehend unverändert war und es fehlte moderne Sprachmerkmale. Swift funktioniert mit Apple's Kakao und Kakao -Berührung Frameworksund ein wesentlicher Aspekt von Swifts Design war die Fähigkeit, mit dem riesigen Bestandszunahme für Apple-Produkte in den vergangenen Jahrzehnten zusammenzuarbeiten. Es wurde mit der Open Source gebaut Llvm Compiler Framework und wurde in integriert Xcode Seit Version 6, veröffentlicht im Jahr 2014. auf Apple -Plattformen,[10] Es verwendet das Ziel-C Laufzeitbibliothek, welches erlaubt C, Ziel c, C ++ und Swift -Code, um innerhalb eines Programms auszuführen.[11]
Apple beabsichtigte Swift, viele Kernkonzepte zu unterstützen, die mit dem verbunden sind Ziel c, vor allem Dynamischer Versandweit verbreitet späte Bindung, Erweiterbare Programmierung und ähnliche Funktionen, aber auf "sicherere" Weise, um das Fangen zu erleichtern Software -Fehler; Swift verfügt über Funktionen, die sich mit einigen gemeinsamen Aspekten befassen Programmierfehler wie Null Zeiger Derference und liefert syntethischer Zucker Um das zu vermeiden Pyramide des Untergangs. Swift unterstützt das Konzept von Protokoll Erweiterbarkeit, ein Erweiterbarkeitssystem, das auf Typen angewendet werden kann, Strukturen und Klassen, was Apple als echte Veränderung der Programmierparadigmen fördert, bezeichnen sie "protokollorientierte Programmierung"[12] (ähnlich zu Züge).[13]
Swift wurde bei Apple vorgestellt 2014 Worldwide Developers Conference (WWDC).[14] Es wurde im Jahr 2014 ein Upgrade auf Version 1.2 und ein großes Upgrade auf SWIFT 2 unter WWDC 2015. Anfangs a Proprietäre Sprache, Version 2.2 wurde gemacht Quelloffene Software unter dem Apache -Lizenz 2.0 am 3. Dezember 2015 für Apples Plattformen und Linux.[15][16]
Durch Version 3.0 durchlief die Syntax von Swift eine erhebliche Entwicklung, wobei das Kernteam die Quellstabilität in späteren Versionen zu einem Fokus machte.[17][18] Im ersten Quartal 2018 übertraf Swift Ziel c in gemessener Popularität.[19]
Swift 4.0, das 2017 veröffentlicht wurde, führte mehrere Änderungen an einigen integrierten Klassen und Strukturen ein. Der Code, der mit früheren Versionen von SWIFT geschrieben wurde, können mithilfe der in Xcode integrierten Migrationsfunktion aktualisiert werden. Swift 5, das im März 2019 veröffentlicht wurde, führte eine stabile binäre Schnittstelle auf Apple -Plattformen ein, sodass die Swift -Laufzeit in Apple -Betriebssysteme einbezogen werden kann. Es ist mit Swift 4 kompatibel.[20]
Swift 5.1 wurde im September 2019 offiziell veröffentlicht. Swift 5.1 baut auf der vorherigen Version von Swift 5 auf, indem die stabilen Funktionen der Sprache auf die Einführung der Modulstabilität erweitert wurden. Die Einführung der Modulstabilität ermöglicht es, binäre Frameworks zu erstellen und zu teilen, die mit zukünftigen Releases von Swift arbeiten werden.[21]
Swift 5.5, offiziell von Apple im 2021 angekündigt WWDC, erheblich erweitert die Sprachunterstützung für Parallelität und Asynchroner Codeinsbesondere eine einzigartige Version des Schauspielermodell.[22]
Geschichte
Die Entwicklung von Swift begann im Juli 2010 von Chris Lattnermit der späteren Zusammenarbeit vieler anderer Programmierer bei Apfel. Swift nahm Sprachideen "von" von Ziel c, Rost, Haskell, Rubin, Python, C#, Cluund viel zu viele andere, um aufzulisten ".[7] Am 2. Juni 2014 die Apple Worldwide Developers Conference (WWDC) -Anwendung war die erste öffentlich veröffentlichte App, die mit Swift geschrieben wurde.[23] A Betaversion des Programmiersprache wurde auf der Konferenz an registrierte Apple -Entwickler veröffentlicht, aber das Unternehmen versprach nicht, dass die endgültige Version von Swift sein würde Quellcode kompatibel mit der Testversion. Apple plante, Quellcodekonverter bei Bedarf für die vollständige Version verfügbar zu machen.[23]
Die schnelle Programmiersprache, ein kostenloses 500-seitiges Handbuch, wurde ebenfalls bei WWDC veröffentlicht und ist auf dem erhältlich Apfelbücher Geschäft und die offizielle Website.[24]
Swift erreichte am 9. September 2014 den 1,0 Meilenstein mit dem Gold-Master von Xcode 6.0 für iOS.[25] Swift 1.1 wurde am 22. Oktober 2014 neben dem Start von Xcode 6.1 veröffentlicht.[26] Swift 1.2 wurde am 8. April 2015 zusammen mit Xcode 6.3 veröffentlicht.[27] Swift 2.0 wurde auf der WWDC 2015 angekündigt und am 21. September 2015 für die Veröffentlichung von Apps im App Store zur Verfügung gestellt.[28] Swift 3.0 wurde am 13. September 2016 veröffentlicht.[29] Swift 4.0 wurde am 19. September 2017 veröffentlicht.[30] Swift 4.1 wurde am 29. März 2018 veröffentlicht.[31]
Swift gewann den ersten Platz für Die am meisten geliebte Programmiersprache in dem Paketüberfluss Entwicklerumfrage 2015[32] und zweiter Platz im Jahr 2016.[33]
Am 3. Dezember 2015 wurden die Swift-Sprache, unterstützende Bibliotheken, Debugger und Paketmanager unter der APache 2.0-Lizenz mit einer Ausnahme der Laufzeitbibliothek offen gesäubert.[34] und Swift.org wurde erstellt, um das Projekt zu hosten. Der Quellcode wird veranstaltet GitHub, wo es für jeden einfach ist, den Code zu erhalten, ihn selbst zu erstellen und sogar Pull -Anfragen zu erstellen, um Code zurück zum Projekt zu beitragen.
Im Dezember 2015, IBM kündigte seine Swift Sandbox -Website an, auf der Entwickler Swift -Code in einem Scheibenbereich schreiben und in einem anderen ausgeben können.[35][36][37] Die Swift Sandbox wurde im Januar 2018 veraltet.[38]
Während der WWDC 2016, Apple kündigte eine an iPad exklusiv App, genannt Swift -Spielplätze, beabsichtigt, den Menschen beizubringen, wie man schnell codiert. Die App wird in a präsentiert 3D-Videospiel Schnittstelle, die Feedback bietet, wenn Codezeilen in eine bestimmte Reihenfolge platziert und ausgeführt werden.[39][40][41]
Im Januar 2017 kündigte Chris Lattner seinen Abgang von Apple für eine neue Position mit Tesla -MotorenMit der Swift -Projekt -Leitrolle zum Team -Veteranen Ted Kremenek.[42][43]
Während des WWDC 2019 kündigte Apple Swiftui mit Xcode 11 an, was einen Rahmen für deklarativ UI -Strukturdesign über alle Apple -Plattformen.[44]
Offizielle Downloads für die Ubuntu Die Verteilung von Linux ist seit Swift 2.2 erhältlich, wobei mehr Distribution seit Swift 5.2.4 hinzugefügt wurde. Centos und Amazon Linux.[45] Es gibt auch ein inoffizielles SDK und ein natives Toolchain -Paket für Android.[46][47]
Plattformen
Die Plattformen Swift -Unterstützung sind die Betriebssysteme von Apple (Darwin, iOS, iPados, Mac OS, tvos, Watchos), Linux, Fenster, und Android.[48][49]
Versionsgeschichte
Ausführung | Veröffentlichungsdatum | Mac OS | Linux | Fenster |
---|---|---|---|---|
Swift 1.0 | 9. September 2014 | Ja | Nein | Nein |
Swift 1.1 | 22. Oktober 2014 | Ja | Nein | Nein |
Swift 1.2 | 8. April 2015 | Ja | Nein | Nein |
Swift 2.0 | 21. September 2015 | Ja | Nein | Nein |
Swift 2.1 | 20. Oktober 2015 | Ja | Nein | Nein |
Swift 2.2 | 21. März 2016 | Ja | Ja | Nein |
Swift 2.2.1 | 3. Mai 2016 | Ja | Ja | Nein |
Swift 3.0 | 13. September 2016 | Ja | Ja | Nein |
Swift 3.0.1 | 28. Oktober 2016 | Ja | Ja | Nein |
Swift 3.0.2 | 13. Dezember 2016 | Ja | Ja | Nein |
Swift 3.1 | 27. März 2017 | Ja | Ja | Nein |
Swift 3.1.1 | 21. April 2017 | Ja | Ja | Nein |
Swift 4.0 | 19. September 2017 | Ja | Ja | Nein |
Swift 4.0.2 | 1. November 2017 | Ja | Ja | Nein |
Swift 4.0.3 | 5. Dezember 2017 | Ja | Ja | Nein |
Swift 4.1 | 29. März 2018 | Ja | Ja | Nein |
Swift 4.1.1 | 4. Mai 2018 | Nein | Ja | Nein |
Swift 4.1.2 | 31. Mai 2018 | Ja | Ja | Nein |
Swift 4.1.3 | 27. Juli 2018 | Nein | Ja | Nein |
Swift 4.2 | 17. September 2018 | Ja | Ja | Nein |
Swift 4.2.1 | 30. Oktober 2018 | Ja | Ja | Nein |
Swift 4.2.2 | 4. Februar 2019 | Nein | Ja | Nein |
Swift 4.2.3 | 28. Februar 2019 | Nein | Ja | Nein |
Swift 4.2.4 | 29. März 2019 | Nein | Ja | Nein |
Swift 5.0[50] | 25. März 2019 | Ja | Ja | Nein |
Swift 5.0.1 | 18. April 2019 | Ja | Ja | Nein |
Swift 5.0.2 | 15. Juli 2019 | Nein | Ja | Nein |
Swift 5.0.3 | 30. August 2019 | Nein | Ja | Nein |
Swift 5.1 | 10. September 2019 | Ja | Ja | Nein |
Swift 5.1.1 | 11. Oktober 2019 | Nein | Ja | Nein |
Swift 5.1.2 | 7. November 2019 | Ja | Ja | Nein |
Swift 5.1.3 | 13. Dezember 2019 | Ja | Ja | Nein |
Swift 5.1.4 | 31. Januar 2020 | Nein | Ja | Nein |
Swift 5.1.5 | 9. März 2020 | Nein | Ja | Nein |
Swift 5.2 | 24. März 2020 | Ja | Ja | Nein |
Swift 5.2.1 | 30. März 2020 | Nein | Ja | Nein |
Swift 5.2.2 | 15. April 2020 | Ja | Ja | Nein |
Swift 5.2.3 | 29. April 2020 | Nein | Ja | Nein |
Swift 5.2.4 | 20. Mai 2020 | Ja | Ja | Nein |
Swift 5.2.5 | 5. August 2020 | Nein | Ja | Nein |
Swift 5.3 | 16. September 2020 | Ja | Ja | Ja[51] |
Swift 5.3.1 | 13. November 2020 | Ja | Ja | Ja |
Swift 5.3.2 | 15. Dezember 2020 | Ja | Ja | Ja |
Swift 5.3.3 | 25. Januar 2021 | Nein | Ja | Ja |
Swift 5.4[52] | 26. April 2021 | Ja | Ja | Ja |
Swift 5.4.1 | 25. Mai 2021 | Nein | Ja | Ja |
Swift 5.4.2 | 28. Juni 2021 | Ja | Ja | Ja |
Swift 5.4.3 | 9. September 2021 | Nein | Ja | Ja |
Swift 5.5 | 20. September 2021 | Ja | Ja | Ja |
Swift 5.5.1 | 27. Oktober 2021 | Ja | Ja | Ja |
Swift 5.5.2 | 14. Dezember 2021 | Ja | Ja | Ja |
Swift 5.5.3 | 9. Februar 2022 | Ja | Ja | Ja |
Swift 5.6[53] | 14. März 2022 | Ja | Ja | Ja |
Swift 5.6.1[54] | 9. April 2022 | Ja | Ja | Ja |
Merkmale
Swift ist eine Alternative zur Ziel c Sprache, die moderne programmensprachige Theoriekonzepte verwendet und sich bemüht, eine einfachere Syntax zu präsentieren. Während seiner Einführung wurde es einfach als "Objektiv-C ohne das Gepäck von C" beschrieben.[55][56]
Standardmäßig enthüllt Swift keine Zeiger und andere unsicher AccessorsIm Gegensatz zu Objective-C, das Zeiger durchdringend verwendet, um sich auf Objektinstanzen zu beziehen. Auch Objective-Cs Verwendung von a Smalltalk-ähnliche Syntax für die Herstellung Methodenaufrufe wurde durch einen Punktnotationsstil ersetzt und Namespace Systemer vertrauter für Programmierer von anderen gemeinsamen objektorientierter (Oo) Sprachen wie Java oder C#. Swift stellt True vor Namens Parameter und behält Hauptziele-C-Konzepte, einschließlich Protokolle, Schließungen und Kategorienoft ersetzen frühere Syntax durch sauberere Versionen und ermöglichen, dass diese Konzepte auf andere Sprachstrukturen angewendet werden Aufzählte Typen (Aufschwung).[57]
Abschlussunterstützung
Schnelle Unterstützung Schließungen (bekannt als Lambdas in anderen Sprachen)[Klarstellung erforderlich]. Schließungen sind in sich geschlossene Funktionsblöcke, die in Code weitergegeben und verwendet werden können.[58] und kann auch als verwendet werden als Anonyme Funktionen. Hier sind einige Beispiele:
// Verschlusstyp, definiert durch seine Eingangs- und Ausgangswerte, kann außerhalb des Verschlusses angegeben werden: Lassen Verschluss1: (Int, Int) -> Int = { arg1, arg2 in Rückkehr arg1 + arg2 } //… oder darin: Lassen Verschluss2 = { (arg1: Int, arg2: Int) -> Int in Rückkehr arg1 + arg2 } // In den meisten Fällen kann der Rückgabetyp von Clossure vom Compiler automatisch abgeleitet werden. // Diese Funktionalität funktioniert jedoch möglicherweise nicht für zu komplexe Ausdrücke. Lassen Verschluss3 = { arg1: Int, arg2: Int in Rückkehr arg1 + arg2 }
Swift hat auch eine nachfolgende Verschlusssyntax, die so aussieht:
// Diese Funktion nimmt eine Schließung vor, die keine Eingabeparameter empfängt und eine Ganzzahl zurückgibt. // evaluiert es und verwendet den Rückgabewert (ein int) des Verschlusss als Rückgabewert der Funktion. Func Foo(Schließung Bar: () -> Int) -> Int { Rückkehr Bar() } // ohne nachfolgende Schließsyntax: Foo(Schließung: { Rückkehr 1 }) // mit nachverfolgter Schließsyntax: Foo { Rückkehr 1 }
Ab Version 5.3 unterstützt Swift mehrere nachfolgende Schließungen:[59]
// Diese Funktion übergeht die Rückgabe des ersten Schließs als Parameter des zweiten. // und gibt das Ergebnis des zweiten Verschlusses zurück: Func Foo(Bar: () -> Int, Baz: (Int) -> Int) -> Int { Rückkehr Baz(Bar()) } // ohne nachverfolgende Schließungen: Foo(Bar: { Rückkehr 1 }, Baz: { x in Rückkehr x + 1 }) // mit 1 nachlaufender Schließung: Foo(Bar: { Rückkehr 1 }) { x in Rückkehr x + 1 } // mit 2 nachfolgenden Schließungen (beachten Sie, dass nur der Argumentname des ersten Verschlusses weggelassen wird): Foo { Rückkehr 1 } Baz: { x in Rückkehr x + 1 }
Hier sind die Kriterien für die nachfolgende Verschlusssyntax:
- Wenn die letzten Argumente einer Funktion Verschlüsse sind, kann man die nachfolgende Verschlusssyntax verwenden.
- Der Parametername des ersten nachfolgenden Verschlusses muss weggelassen werden.
- Die Parameternamen der verbleibenden nachverfolgenden Schließungen dürfen nicht weggelassen werden.
- Wenn alle Argumente einer Funktion nachfolgende Schließungen sind, können die Klammern nach dem Namen der Funktion weggelassen werden.
- Aufrufe zu einer Funktion mit nachverfolgung
bewachen
Aussage.[60]
String -Unterstützung
Unter dem Kakao und Kakao -Berührung Umgebungen, viele gemeinsame Klassen waren Teil der Foundation Kit Bibliothek. Dies beinhaltete die NSString String -Bibliothek (mit Verwendung Unicode, UTF-8 in Swift 5, geändert von UTF-16), die Sammlung von NSArray und Nsdictionary und andere. Objektiv-C lieferte verschiedene Teile von syntethischer Zucker Damit einige dieser Objekte innerhalb der Sprache im Fliege erstellt werden können. Sobald sie erstellt wurden, wurden die Objekte jedoch mit Objektaufrufen manipuliert. Zum Beispiel bei der Objektiv-C-Verkettung von zwei von NSStrings erforderlichen Methodenaufrufen ähnlich wie folgt:
Nsstring *str = @"hallo,"; str = [str StringByAppendingString:@" Welt"];
In Swift wurden viele dieser Grundtypen in den Kern der Sprache gefördert und können direkt manipuliert werden. Zum Beispiel werden Saiten unsichtbar mit NSString überbrückt (wenn die Grundlage importiert wird) und können jetzt mit dem verkettet werden +
Bediener, der eine stark vereinfachte Syntax ermöglicht; Das vorherige Beispiel wird:[61]
var str = "hallo," str += " Welt"
Zugangskontrolle
Swift unterstützt fünf Zugangskontrolle Ebenen für Symbole: open
, public
, internal
, fileprivate
, und private
. Im Gegensatz zu vielen objektorientierten Sprachen ignorieren diese Zugriffskontrollen Nachlass Hierarchien: private
Zeigt an, dass ein Symbol nur unmittelbar zugänglich ist Umfang, fileprivate
Gibt an, dass es nur aus der Datei zugänglich ist. internal
zeigt an, dass es innerhalb des enthaltenden Moduls zugänglich ist. public
zeigt an, dass es von jedem Modul zugänglich ist, und open
(Nur für Klassen und deren Methoden) zeigt an, dass die Klasse außerhalb des Moduls unterklassifiziert werden kann.[62]
Optionale und Verkettung
Eine wichtige neue Funktion in Swift ist Optionstypen, welche es erlauben Verweise oder Werte, die in ähnlicher Weise wie dem gemeinsamen Muster in arbeiten können C, wo ein Zeiger kann sich auf einen Wert beziehen oder null sein. Dies impliziert, dass nicht optionale Typen nicht zu a führen können NULL-ZEINIGER-Fehler; Der Compiler kann sicherstellen, dass dies nicht möglich ist.
Optionale Typen werden mit dem erstellt Optional
Mechanismus - um eine Ganzzahl zu machen, die nullbar ist, würde man eine ähnliche Erklärung verwenden var optionalInteger: optional
. Wie in C#,[63] Swift enthält auch syntaktischen Zucker dafür, sodass eine Variable angibt, dass nach dem Typennamen ein Fragemarke platziert wird. var optionalInteger: int?
.[64] Variablen oder Konstanten, die optional gekennzeichnet sind Null
. Optionale Typen wickeln der Basistyp, der zu einer anderen Instanz führt. Saite
und String?
sind grundsätzlich unterschiedliche Typen, letztere haben mehr gemeinsam mit Int?
als Saite
.
Um auf den Wert im Inneren zuzugreifen, vorausgesetzt, er muss nicht nil sind, muss er sein ausgepackt um die Instanz im Inneren freizulegen. Dies wird mit dem durchgeführt !
Operator:
Lassen MyValue = Anoptionalinstance!Somemethod()
In diesem Fall die !
Operator packt sich aus Anoptionalinstance
Um die Instanz im Inneren freizulegen, können Sie den Methodenaufruf darauf erfolgen. Wenn Anoptionalinstance
ist Nil, ein Null-Zeiger-Fehler tritt auf. Dies kann in der Praxis ärgerlich sein, so dass Swift auch das Konzept von enthält Optionale Verkettung Um zu testen, ob die Instanz Null ist, und dann auszupacken, wenn es nicht null ist:
Lassen MyValue = Anoptionalinstance?.Somemethod()
In diesem Fall die Laufzeitanrufe Somemethod
nur wenn Anoptionalinstance
ist nicht nil, unterdrückt den Fehler. Normalerweise muss der Programmierer testen, ob MyValue
ist NIL vor dem Fortfahren. Der Ursprung des Begriffs Verkettung stammt aus dem häufigeren Fall, in dem mehrere Methodenaufrufe/Getter miteinander gekettet werden. Zum Beispiel:
Lassen ein Mieter = ein Gebäude.Mieterliste[5] Lassen ihre Leitung = ein Mieter.Mietschwänke Lassen Leasestart = ihre Leitung?.Anfangsdatum
kann reduziert werden auf:
Lassen Leasestart = ein Gebäude.Mieterliste[5].Mietschwänke?.Anfangsdatum
Das ?
Syntax umgeht die Pyramide des Untergangs.
Swift 2 führte das neue Schlüsselwort vor bewachen
In Fällen, in denen der Code aufhören sollte, auszuführen, wenn eine Bedingung nicht erfüllt ist:
bewachen Lassen Leasestart = ein Gebäude.Mieterliste[5]?.Mietschwänke?.Anfangsdatum anders { // Behandle den Fehlerfall, in dem irgendetwas in der Kette nil ist // Ansonsten muss der Umfang die aktuelle Methode oder Schleife verlassen } // Fahren Sie fort und wissen, dass Leasestart nicht nil ist
Verwendung bewachen
hat drei Vorteile. Während die Syntax als als wirken kann wenn
Aussage, sein Hauptnutzen besteht darin, die Nicht-Nullabilität zu schließen. Wo ein wenn
Erklärung erfordert einen Fall, bewachen
Angenommen den Fall basierend auf der angegebenen Bedingung. Auch seit bewachen
enthält keinen Umfang, mit Ausnahme der anders
Schließung, Leasestart
wird als ausgepackter optional für den Super-Scope der Wache dargestellt. Zuletzt, wenn die bewachen
Der Test der Erklärung schlägt fehl, Swift erfordert das anders
Um die aktuelle Methode oder Schleife zu verlassen und sicherzustellen, dass sie sicherstellen Leasestart
Niemals ist zugegriffen, wenn Null
. Dies wird mit den Schlüsselwörtern durchgeführt Rückkehr
, fortsetzen
, Unterbrechung
, oder Wurf
, oder durch Aufrufen einer Funktion, die a zurückgibt a Niemals
(z.B. fataler Fehler()
).
Objective-C wurde schwach tippt und ermöglichte jederzeit, dass jede Methode jedes Objekt aufgerufen wird. Wenn der Methodenaufruf fehlschlug, gab es in der Laufzeit einen Standard -Handler, der NIL zurückgab. Das bedeutete, dass keine Auswehung oder Tests erforderlich waren, die äquivalente Aussage in Objective-C:
Leasestart = [[[ein Gebäude Mieterliste:5] Mietschwänke] Anfangsdatum]
Würde Nil zurückgeben, und dies könnte getestet werden. Dies forderte jedoch auch, dass alle Methodenaufrufe dynamisch sind, was einen erheblichen Overhead einführt. Die Verwendung von Optionen durch Swift bietet einen ähnlichen Mechanismus zum Testen und Umgang mit NILs, dies jedoch auf eine Weise, die es dem Compiler ermöglicht, zu verwenden statischer Versand Da die Auswehung auf eine definierte Instanz (die Wrapper) aufgerufen wird, im Vergleich zu im Laufzeitversandsystem.
Werttypen
In vielen objektorientierten Sprachen werden Objekte intern in zwei Teilen dargestellt. Das Objekt wird als Datenblock gespeichert, die auf dem platziert sind Haufen, während der Name (oder "Handle) dieses Objekts durch a dargestellt wird Zeiger. Objekte werden zwischen den Methoden übergeben, indem der Wert des Zeigers kopiert werden, sodass die gleichen zugrunde liegenden Daten auf dem Heap von Personen mit einer Kopie zugegriffen werden können. Im Gegensatz dazu werden grundlegende Typen wie Ganzzahlen und Gleitkommawerte direkt dargestellt. Der Handle enthält die Daten, nicht einen Zeiger darauf, und diese Daten werden durch Kopieren direkt an Methoden übergeben. Diese Zugangsstile werden bezeichnet Pass-by-Reference Im Fall von Objekten und Pass-by-Wert für Grundtypen.
Beide Konzepte haben ihre Vor- und Nachteile. Objekte sind nützlich, wenn die Daten groß sind, wie die Beschreibung eines Fensters oder den Inhalt eines Dokuments. In diesen Fällen wird der Zugriff auf diese Daten durch Kopieren eines Werts von 32 oder 64-Bit im Vergleich zum Kopieren einer gesamten Datenstruktur bereitgestellt. Kleinere Werte wie Ganzzahlen haben jedoch die gleiche Größe wie Zeiger (normalerweise sind beide eins Wort), so dass es keinen Vorteil hat, einen Zeiger zu übergeben, im Vergleich zum Wert. Pass-by-Referenz erfordert von Natur aus einen Derferenzvorgang, der in einigen Operationen einen bemerkenswerten Overhead erzeugen kann, typischerweise solche, die mit diesen Grundwerttypen wie Mathematik verwendet werden.
Ähnlich wie bei C# und im Gegensatz zu den meisten anderen OO-Sprachen bietet Swift integrierte Unterstützung für Objekte, die entweder Pass-by-Referenz- oder Pass-by-Wert-Semantik verwenden, die erstere mit dem verwendet haben Klasse
Erklärung und letztere verwenden Struktur
. Strukturen in SWIFT haben fast alle gleichen Merkmale wie Klassen: Methoden, Implementierung von Protokollen und Verwendung der Verlängerungsmechanismen. Aus diesem Grund bezeichnet Apple alle Daten allgemein als als Instanzen, gegen Objekte oder Werte. Strukturen unterstützen jedoch keine Vererbung.[65]
Der Programmierer kann kostenlos auswählen, welche Semantik für jede Datenstruktur in der Anwendung besser geeignet ist. Größere Strukturen wie Windows würden als Klassen definiert, sodass sie als Zeiger weitergegeben werden können. Kleinere Strukturen können wie ein 2D-Punkt als Strukturen definiert werden, die passig für Wert sind und direkten Zugriff auf ihre internen Daten ohne Dereferenz ermöglichen. Die Leistungsverbesserung, die dem Pass-by-Wert-Konzept innewohnt, ist so, dass Swift diese Typen für fast alle gemeinsamen Datentypen verwendet Int
und Doppelt
und Typen, die normalerweise durch Objekte dargestellt werden, wie Saite
und Array
.[65] Die Verwendung von Werttypen kann auch zu erheblichen Leistungsverbesserungen bei Benutzeranwendungen führen.[66]
Um sicherzustellen, dass selbst die größten Strukturen beim Abgeben keine Leistungsstrafe verursachen, verwendet Swift Kopieren Sie auf Schreiben so dass die Objekte nur kopiert werden, wenn das Programm versucht, einen Wert darin zu ändern. Dies bedeutet, dass die verschiedenen Zubehör einen Zeiger auf denselben Datenspeicher haben. Während die Daten physikalisch als eine Instanz im Speicher gespeichert sind, werden diese Werte auf der Ebene der Anwendung getrennt und die physische Trennung durch Kopie auf Schreiben nur bei Bedarf erzwungen.[67]
Protokollorientierte Programmierung
Ein wichtiges Merkmal von Objective-C ist die Unterstützung für Kategorien, Methoden, die hinzugefügt werden können, um die Klassen zur Laufzeit zu erweitern. Kategorien ermöglichen es, Klassen an Ort zu verlängern, um neue Funktionen hinzuzufügen, ohne dass die Unterklasse erforderlich ist oder sogar Zugriff auf das Original hat Quellcode. Ein Beispiel könnte sein, um hinzuzufügen Rechtschreibprüfung Unterstützung der Basis Nsstring
Klasse, was bedeutet alle Instanzen von NSString in der Anwendungsgewinnzaubersprüfung. Das System wird auch häufig als Organisationstechnik verwendet, sodass verwandten Code in Bibliotheks-ähnliche Erweiterungen gesammelt werden können. Swift unterstützt dieses Konzept weiterhin, obwohl sie jetzt bezeichnet werden Erweiterungenund mit dem Schlüsselwort deklariert Verlängerung
. Im Gegensatz zu Objective-C kann SWIFT auch vorhandene Instanzen neue Eigenschaften, Typen, Typen und Aufzüge hinzufügen.
Ein weiteres Schlüsselmerkmal von Objective-C ist die Verwendung von Protokollein den meisten modernen Sprachen als bekannt als Schnittstellen. Protokolle versprechen, dass eine bestimmte Klasse eine Reihe von Methoden implementiert, was bedeutet, dass andere Objekte im System diese Methoden auf jedem Objekt aufrufen können, das dieses Protokoll unterstützt. Dies wird oft in modernen OO -Sprachen als Ersatz für verwendet MehrfacherbeObwohl die Funktionssätze nicht ganz ähnlich sind. Ein häufiges Beispiel für ein Protokoll im Kakao ist das NSCopying
Protokoll, das eine Methode definiert, Copywithzone
das implementiert tiefes Kopieren auf Objekten.[68]
In Objective-C und den meisten anderen Sprachen, die das Protokollkonzept implementieren, liegt es an dem Programmierer, sicherzustellen, dass die erforderlichen Methoden in jeder Klasse implementiert werden.[69] Swift fügt die Möglichkeit hinzu, diese Methoden mit Erweiterungen hinzuzufügen und zu verwenden generische Programmierung (Generika), um sie zu implementieren. Zusammengenommen ermöglichen diese Ermöglicht, dass Protokolle einmal geschrieben werden und eine Vielzahl von Instanzen unterstützen. Außerdem kann der Erweiterungsmechanismus verwendet werden, um einem Objekt eine Protokollkonformität hinzuzufügen, in der dieses Protokoll in seiner Definition nicht aufgeführt ist.[68]
Zum Beispiel könnte ein Protokoll genannt werden StringConvertier
, was sicherstellt, dass Fälle, die dem Protokoll entsprechen, a tostring
Methode, die a zurückgibt Saite
. In Swift kann dies mit einem solchen Code deklariert werden:
Protokoll StringConvertier { Func tostring() -> Saite }
Dieses Protokoll kann jetzt zu String hinzugefügt werden, ohne dass die Quelle der Basisklasse zugänglich ist:
Verlängerung Saite: StringConvertier { Func tostring() -> Saite { selbst } }
Wie viele moderne Sprachen, die Schnittstellen unterstützen, können Protokolle als Typen verwendet werden, was bedeutet, dass Variablen und Methoden durch Protokoll anstelle ihres spezifischen Typs definiert werden können:
var somesortofprintableBoBject: StringConvertier ... drucken(somesortofprintableBoBject.tostring())
Es spielt keine Rolle, welche Art von Instanz somesortofprintableBoBject
IS, der Compiler sorgt dafür, dass er dem Protokoll entspricht, und daher ist dieser Code sicher. Diese Syntax bedeutet auch, dass Sammlungen auch auf Protokollen basieren können lass dructablearray = [stringConvertierbar]
.
Da Swift Strukturen und Klassen als ähnliche Konzepte behandelt, werden sowohl Erweiterungen als auch Protokolle in der Laufzeit von Swift ausführlich verwendet, um eine reichhaltige API zu liefern, die auf Strukturen basiert. Zum Beispiel verwendet Swift eine Erweiterung, um das hinzuzufügen Gleichwertig
Protokoll an viele ihrer Grundtypen, wie Strings und Arrays, sodass sie mit dem verglichen werden können ==
Operator. Ein konkretes Beispiel dafür, wie alle diese Merkmale interagieren Standardprotokollimplementierungen:
Func ! = <T : Gleichwertig> (lhs: T, RHS: T) -> Bool
Diese Funktion definiert eine Methode, die in einer beliebigen Instanz funktioniert, die sich entspricht Gleichwertig
Bereitstellung a nicht gleich Funktion. Jede Instanz, Klasse oder Struktur erhält diese Implementierung automatisch, indem sie sich anpassen Gleichwertig
. Wie viele Fälle gewinnen Gleichwertig
Durch ihre Basisimplementierungen oder andere generische Erweiterungen entspricht die meisten grundlegenden Objekte in der Laufzeitgewinn und nicht ohne Code.[70]
Diese Kombination von Protokollen, Standardeinstellungen, Protokollvererbung und Erweiterungen ermöglicht es vielen Funktionen, die normalerweise mit Klassen und Vererbung auf Werttypen implementiert werden.[68] Dies kann zu einer dramatischen Leistungsverbesserungen ohne signifikante Grenzen der API führen. Dieses Konzept ist in Swift so weit verbreitet, dass Apple begonnen hat, es a zu nennen Protokollorientierte Programmiersprache. Sie schlagen vor, viele der Problembereiche zu beheben, die normalerweise durch Klassen und Vererbung unter Verwendung von Protokollen und Strukturen gelöst werden.
Bibliotheken, Laufzeit und Entwicklung
Auf Apple Systems verwendet Swift die gleiche Laufzeit wie die vorhandene Ziel c System, benötigt aber iOS 7 oder macOS 10,9 oder höher. Es hängt auch von ab Grand Central Dispatch.[71] Swift- und Objective-C-Code können in einem Programm und im weiteren Sinne auch C und C ++ verwendet werden. Im Gegensatz zu C, C ++ Code kann nicht direkt von Swift verwendet werden. Es muss ein Objektiv-C- oder C-Wrapper zwischen Swift und C ++ erstellt werden.[72] Im Fall von Objective-C hat SWIFT einen erheblichen Zugriff auf das Objektmodell und kann zum Unterklassen, Erweiterung und Verwenden von Code-C-Code verwendet werden, um Protokollunterstützung bereitzustellen.[73] Das Gegenteil ist nicht wahr: Eine schnelle Klasse kann in Objective-C nicht unterklassifiziert werden.[74]
Um die Entwicklung solcher Programme und die Wiederverwendung von vorhandenem Code zu unterstützen, bietet Xcode 6 und höher ein semi-automatisches System, das a baut und pflegt a Überbrückungsheader Objektiv-C-Code dem Swift aussetzen. Dies hat die Form eines zusätzlichen Header-Datei Das definiert oder importiert einfach alle Objektiv-C-Symbole, die im Swift-Code des Projekts benötigt werden. Zu diesem Zeitpunkt kann Swift auf die Typen, Funktionen und Variablen verweisen, die in diesen Importen deklariert sind, als ob sie in Swift geschrieben wären. Objective-C-Code kann auch Swift-Code direkt verwenden, indem eine automatisch gepflegte Header-Datei mit Objektiv-C-Deklarationen der Swift-Symbole des Projekts importiert wird. Beispielsweise könnte eine objektive C-Datei in einem gemischten Projekt namens "MyApp" auf Swift-Klassen zugreifen oder mit dem Code fungieren #import "myapp-swift.h"
. Nicht alle Symbole sind jedoch durch diesen Mechanismus verfügbar-die Verwendung von schnellspezifischen Merkmalen wie generische Typen, nicht-objekte optionale Typen, anspruchsvolle Enums oder sogar Unicode-Kennungen können ein Symbol von Objective-C nicht zugänglich machen.[75]
Swift hat auch nur begrenzte Unterstützung für Attribute, Metadaten, die von der Entwicklungsumgebung gelesen werden und nicht unbedingt Teil des kompilierten Code ist. Wie Objective-C verwenden Attribute die @
Syntax, aber der aktuell verfügbare Satz ist klein. Ein Beispiel ist das @Boutlet
Attribut, das einen bestimmten Wert im Code als markiert Auslauf, verfügbar für die Verwendung innerhalb Schnittstellenbauer (IB). Ein Auslauf ist ein Gerät, das den Wert der On-Screen-Anzeige an ein Objekt im Code bindet.
Auf Nicht-Apple-Systemen hängt SWIFT nicht von einer Ziel-C-Laufzeit oder anderen Apple-Systembibliotheken ab. Eine Reihe von Swift -Implementierungen "Corelib" ersetzen sie. Dazu gehören eine "Swift-Corelibs-Fundierung", um für die zu stehen Foundation Kit, "Swift-Corelibs-libDispatch", um für den Grand Central Dispatch zu stehen, und ein "Swift-Corelibs-Xctest", um für die xcTest-APIs von zu stehen Xcode.[76]
Mit Xcode 11 hat Apple ab 2019 auch ein großes neues UI -Paradigma namens Swiftui hinzugefügt. Swiftui ersetzt den älteren Schnittstellenbauer Paradigma mit einem neuen Paradigma für deklarative Entwicklung.[77]
Speicherverwaltung
Swift verwendet Automatische Referenzzählung (ARC) zu Speicher verwalten. Apple benötigte früher eine manuelle Speicherverwaltung in Objective-C, führte jedoch 2011 ARC ein, um eine einfachere Speicherzuweisung und Deallokation zu ermöglichen.[78] Ein Problem mit ARC ist die Möglichkeit, a zu erstellen starker Referenzzyklus, wo Objekte auf eine Weise verweisen, dass Sie das Objekt erreichen können, mit dem Sie anhand der folgenden Referenzen gestartet werden (z. B. A Referenzen B, B Referenzen A). Dies führt dazu, dass sie in den Speicher werden, da sie nie freigesetzt werden. Swift liefert die Schlüsselwörter schwach
und ungehindert
um starke Referenzzyklen zu verhindern. Normalerweise würde eine Eltern-Kind-Beziehung eine starke Referenz verwenden, während ein Kind der Eltern entweder verwenden würde schwach
Referenz, wo Eltern und Kinder nicht verwandt sein können oder ungehindert
Wo ein Kind immer einen Elternteil hat, aber Elternteil hat möglicherweise kein Kind. Schwache Referenzen müssen optionale Variablen sein, da sie sich ändern und werden können Null
.[79]
Eine Schließung innerhalb einer Klasse kann auch einen starken Referenzzyklus erzeugen, indem Selbstreferenzen erfasst werden. Selbstbeweise, die als schwach oder unbestimmt behandelt werden sollen, können mit a angezeigt werden Capture -Liste.
Debugging und andere Elemente
Ein Schlüsselelement des Swift -Systems ist die Fähigkeit, sauber und in der Entwicklungsumgebung zu debugieren und unter Verwendung von a zu laufen Read -E -druck -Schleife (Repl), die ihm interaktive Eigenschaften mehr mit den Skriptfähigkeiten von Python als traditionelles gemeinsam gemeinsam haben Systemprogrammierung Sprachen. Die Reply wird weiter mit verstärkten mit Spielplätze, Interaktive Ansichten, die in der Xcode-Umgebung ausgeführt werden, die auf Code oder Debugger reagieren, ändert sich im Fliege.[80] Mit Spielplätzen können Programmierer Swift -Code zusammen mit Markdown -Dokumentation hinzufügen. Wenn sich einige Code im Laufe der Zeit oder im Hinblick auf einen anderen Fernkampfwert ändert, kann die Ansicht mit dem Timeline -Assistenten verwendet werden, um die Ausgabe auf animierte Weise zu demonstrieren. Darüber hinaus verfügt XCode über Debugging -Funktionen für die Swift -Entwicklung, einschließlich Bruchpunkten, Schritt und Übergangsanweisungen sowie Aufschlüsselungen für die UI -Elemente für App -Entwickler.
Apple sagt, dass Swift "eine Programmiersprache in Industriequalität ist, die so ausdrucksstark und angenehm ist wie eine Skriptsprache".[81]
Leistung
Viele der mit SWIFT eingeführten Funktionen haben bekannte Leistungs- und Sicherheits-Kompromisse. Apple hat implementiert Optimierungen das reduziert diesen Overhead.[82]
Vergleiche mit anderen Sprachen
Swift gilt als als C Familienprogrammiersprache und ähnelt C in verschiedenen Arten:
- Die meisten C -Betreiber werden in Swift verwendet, aber es gibt einige neue Betreiber, beispielsweise zur Unterstützung von Ganzzahloperationen mit Überlauf (siehe unter Differenzen).
- Geschweifte Klammern werden verwendet, um Aussagen zu gruppieren.
- Variablen werden mit einem zugewiesen Gleiches Zeichenverglichen aber mit Verwendung Zwei aufeinanderfolgende Anzeichen dafür. Ein neuer Identitätsbetreiber === wird bereitgestellt, um zu überprüfen, ob sich zwei Datenelemente auf dasselbe beziehen Objekt.
- Kontrollanweisungen
während
,wenn
, undSchalter
sind ähnlich, haben aber erweiterte Funktionen, z. B. aSchalter
Das erfordert Nichtteger-Fälle,während
undwenn
Unterstützung Musteranpassung und bedingt entpackenden Optionen,zum
verwendet diefor i in 1...10
Syntax. - Eckige Klammern werden verwendet mit Arraysbeide, um sie zu deklarieren und einen Wert in einem bestimmten Index in einem von ihnen zu erhalten.
Es hat auch Ähnlichkeiten zu Objective-C:
- Grundlegende numerische Typen (
Int, uint, float, doppelt
) - Klassenmethoden werden wie Instanzmethoden vererbt.
selbst
In Klassenmethoden ist die Klasse die Methode aufgerufen. - Ähnlich
zum
...in
Aufzählungssyntax.
Zu den Unterschieden von Objective-C gehören:
- Aussagen müssen nicht mit Semikolonen enden (
;
), obwohl diese verwendet werden müssen, um mehr als eine Anweisung in einer Zeile zuzulassen. - Keine Header -Dateien.
- Verwendet Geben Sie Inferenz ein.
- Generische Programmierung.
- Funktionen sind erste Klasse Objekte.
- Aufzählungsfälle können zugeordneten Daten haben (Algebraische Datentypen).
- Bediener können für Klassen neu definiert werden (Bedienerüberlastung) und neue Betreiber können definiert werden.
- Saiten unterstützen voll und ganz Unicode. Die meisten Unicode -Zeichen können entweder in Kennungen oder in Operatoren verwendet werden.
- Nein Ausnahmebehandlung. Swift 2 führt ein anderes und inkompatible Fehlerbehandlungsmodell ein.[83]
- Mehrere Merkmale früher C-Familiensprachen Das sind leicht zu missbrauchen, wurden entfernt:
- Zeiger sind standardmäßig nicht freigelegt. Es ist nicht erforderlich, dass der Programmierer die Verfolgung und Markennamen für die Referenzierung oder Dereferenzierung verfolgt und markiert.
- Zuweisungen geben keinen Wert zurück. Dies verhindert den gemeinsamen Schreibfehler
i = 0
Anstatt voni == 0
Durch das Werfen eines Kompilierungs-Zeit-Fehlers. - Keine Notwendigkeit zu verwenden
Unterbrechung
Aussagen inSchalter
Blöcke. Einzelfälle fallen nicht in den nächsten Fall, es sei denn, dasdurchfallen
Anweisung wird verwendet. - Variablen und Konstanten werden immer initialisiert und Array -Grenzen werden immer überprüft.
- Ganzzahlüberläufe, was dazu führt zu undefiniertes Verhalten Für signierte Ganzzahlen in C werden als Laufzeitfehler in Swift gefangen. Programmierer können wählen, um Überläufe mithilfe der speziellen arithmetischen Operatoren zu ermöglichen
&+
,&--
,&*
,&//
und&%
. Die EigenschaftenMindest
undMax
werden in Swift für alle Ganzzahltypen definiert und können verwendet werden, um potenzielle Überläufe sicher zu überprüfen, anstatt sich auf Konstanten zu verlassen, die für jeden Typ in externen Bibliotheken definiert sind. - Die Ein-Statement-Form von
wenn
undwährend
, was die Auslassung von Klammern um die Aussage ermöglicht, wird nicht unterstützt. - C-Art-Aufzählung
für (int i = 0; i <c; i ++)
, was anfällig für Auslösende Fehler, ist nicht unterstützt (von Swift 3 weiter).[84] - Die vor- und nach- und nach- Inkrement- und Decrement -Operatoren (
i ++
,--ich
...) werden nicht unterstützt (von Swift 3 voran), mehr seit C-Stilzum
Aussagen werden auch von Swift 3 weiter unterstützt.[85]
Entwicklung und andere Implementierungen
Da die Sprache Open-Source ist, gibt es Aussichten, dass sie auf das Web portiert werden.[86] Einige Webrahmen wurden bereits entwickelt, wie z. IBM's Kitura, Perfekt und Dampf.
Eine offizielle Arbeitsgruppe "Server APIs" wurde ebenfalls von Apple gestartet.[87] Mit Mitgliedern der Swift Developer Community spielten eine zentrale Rolle.[88]
Eine zweite kostenlose Implementierung von Swift, die sich abzielt Kakao, Microsoft's Gemeinsame Sprachinfrastruktur (.NETZ), und die Java und Android Plattform existiert als Teil der Elements Compiler aus Remobjects Software.[89]
Durch Kombinieren Toolchains von llvm und Macintosh Programmer WorkshopEs ist möglich, eine sehr kleine Teilmenge der Sprache auf Mac OS 9.[90]
Siehe auch
- Vergleich der Programmiersprachen
- Ziel c
- Kotlin (Programmiersprache)
- Python (Programmiersprache)
- NIM (Programmiersprache)
Verweise
- ^ US -Patent Nr. 9329844
- ^ "Swift hat 1,0 erreicht". Apfel. 9. September 2014. Abgerufen 8. März, 2015.
- ^ https://github.com/apple/swift/releases/tag/swift-5.6.2-release.
- ^ "Schnell, objektiv".
Swift ist proprietär und geschlossen: Es wird vollständig von Apple kontrolliert und es gibt keine Open -Source -Implementierung.
- ^ Lattner, Chris (11. Juni 2014). "Re: [LLVMDEV] [CFE-dev] [Werbung] Offene Positionen im Swift Compiler-Team von Apple". Archiviert von das Original am 14. Juli 2014. Abgerufen 12. Juni, 2014.
Sie können sich vorstellen, dass viele von uns wollen, dass es Open Source und Teil von LLVM ist, aber die Diskussion ist noch nicht stattgefunden und nicht für einige Zeit.
- ^ Lattner, Chris (3. Juni 2014). "Chris Lattners Homepage". Chris Lattner. Abgerufen 3. Juni, 2014.
Die schnelle Sprache ist das Produkt unermüdlicher Anstrengungen eines Teams von Sprachenexperten, Dokumentations-Gurus, Compiler-Optimierung Ninjas und einer unglaublich wichtigen internen Dogfooding-Gruppe, die Feedback zur Verfeinerung und den Schlachtstest-Ideen gab. Natürlich profitierte es auch stark von den Erlebnissen, die viele andere Sprachen auf diesem Gebiet hart erkannt haben und Ideen von Objective-C, Rost, Haskell, Ruby, Python, C#, CLU und viel zu vielen anderen zeichnen, um aufzulisten.
- ^ a b Lattner, Chris (3. Juni 2014). "Chris Lattners Homepage". Chris Lattner. Abgerufen 3. Juni, 2014.
Ich habe im Juli 2010 mit der Arbeit an der Swift -Programmiersprache begonnen. Ich habe einen Großteil der Grundsprachenstruktur implementiert, wobei nur wenige Menschen ihre Existenz kennen. Ein paar andere (erstaunliche) Menschen haben Ende 2011 ernsthaft beigetragen, und es wurde zu einem wichtigen Schwerpunkt für die Apple Developer Tools Group im Juli 2013 [...] Zeichnen von Ideen aus Ziel c, Rost, Haskell, Ruby, Python, C#, Clu und viel zu viele andere, um aufzulisten.
- ^ "Bauen assert () in Swift, Teil 2: __file__ und __line__". Abgerufen 25. September, 2014.
- ^ "Einflüsse - die Rostreferenz". doc.rustlang.org. Abgerufen 2. Mai, 2020.
- ^ "Der Swift Linux -Port". Swift.org. Apple Inc. 3. Dezember 2015. Abgerufen 3. August, 2016.
- ^ Timmer, John (5. Juni 2014). "Ein schneller Blick auf Swift, Apples neue Programmiersprache". ARS Technica. Conde nast. Abgerufen 6. Juni, 2014.
- ^ Protokollorientierte Programmierung in Swift. Apple Inc. Youtube.
- ^ "Konzepte ähneln Rostmerkmalen".
- ^ Williams, Owen (2. Juni 2014). "Tim Berners-Lees sechzigste Geburtstags-Apple kündigt Swift an, eine neue Programmiersprache für iOS". Das nächste Web. Abgerufen 2. Juni, 2014.
- ^ "Apples neue Programmiersprache Swift ist jetzt Open Source". Der Verge. 3. Dezember 2015. Abgerufen 5. Dezember, 2015.
- ^ "Apple Open Sources schnell im letzten Platz im Unternehmen". CIO Journal. Das Wall Street Journal Blogs. 3. Dezember 2015. Abgerufen 5. Dezember, 2015.
- ^ "Rückblick auf Swift 3 und voraus zu Swift 4". Swift -Foren. 29. Juli 2016. Abgerufen 19. November, 2018.
- ^ "Swift-Evolution". Schnelle Entwicklung. Abgerufen 19. November, 2018.
- ^ "Die Redmonk -Programmierrangliste: Januar 2018 - Tecosystems". Redmonk.com. 7. März 2018. Abgerufen 20. November, 2018.
- ^ Kremenek, TED (25. März 2019). "Swift 5 veröffentlicht!".
- ^ Kremenek, TED (20. September 2019). "Swift 5.1 veröffentlicht!".
- ^ Hudson, Paul (6. Juni 2021). "Was ist neu in Swift 5.5?". Hackingwithswift.com. Hacking mit Swift. Abgerufen 8. Juni, 2021.
- ^ a b Plattformen Bundesstaat der Union, Sitzung 102, Apple Worldwide Developers Conference, 2. Juni 2014
- ^ Die schnelle Programmiersprache. Apfel. 2. Juni 2014. Abgerufen 2. Juni, 2014.
- "Dokumentation". Schnell.
- ^ "Swift hat 1,0 erreicht". 9. September 2014. Abgerufen 10. September, 2014.
- ^ "Xcode 6.1 Versionsnotizen". 22. Oktober 2014. Abgerufen 23. Januar, 2015.
- ^ "Xcode 6.3 Versionsnotizen". 8. April 2015. Abgerufen 8. April, 2015.
- ^ "Swift 2 Apps im App Store". Swift Blog. Abgerufen 13. März, 2016.
- ^ "Swift 3.0 veröffentlicht!". Swift.org. 13. September 2016. Abgerufen 26. Oktober, 2016.
- ^ "Swift 4.0 veröffentlicht!". Swift.org. 17. September 2017. Abgerufen 1. März, 2018.
- ^ "Swift 4.1 veröffentlicht!". Swift.org. 29. März 2018. Abgerufen 30. März, 2018.
- ^ "Stack Overflow Developer Survey -Ergebnisse 2015".
- ^ "Stack Overflow Developer Umfrageergebnisse 2016".
- ^ "Swift.org und Open Source". Swift.org. Apple Inc. Abgerufen 25. Februar, 2019.
- ^ "Einführung der IBM Swift Sandbox - Swift". Schnell. Abgerufen 5. Dezember, 2015.
- ^ Mayo, Benjamin (4. Dezember 2015). "Schreiben Sie Swift -Code in einem Webbrowser mit der IBM Swift Sandbox". 9to5mac. Abgerufen 5. Dezember, 2015.
- ^ "Nachdem Apple es offen bewertet, stellt IBM Swift -Programmierung in die Cloud | ZDNET ein.". ZDNET. Abgerufen 5. Dezember, 2015.
- ^ "Swift -Paketkatalog und Swift Sandbox -Abschaltung". Abgerufen 9. November, 2018.
- ^ "Swift -Spielplätze". Apple -Entwickler. Abgerufen 19. Juni, 2016.
- ^ "Swift -Spielplätze - Vorschau". Apfel. Abgerufen 19. Juni, 2016.
- ^ Mayo, Benjamin (13. Juni 2016). "Apple kündigt Swift -Spielplätze für das iPad bei WWDC an, Public Release im Herbst". 9to5mac. Abgerufen 19. Juni, 2016.
- ^ Cunningham, Andrew (10. Januar 2017). "Langjähriger Apple -Programmierer und Swift Creator lassen Apple für Tesla". ARS Technica.
- ^ Wuerthele, Mike (13. Januar 2017). "Der neue Swift -Projektleiter Ted Kremenek soll die Show für einige Zeit hinter den Kulissen führen". Appleinsider.
- ^ Daniel Eran Dilger. "WWDC19: Swiftui war der hellste Stern in einer Galaxie neuer Ideen". Appleinsider. Abgerufen 19. Juli, 2019.
- ^ "Swift.org - Swift herunterladen". Abgerufen 21. Juni, 2020.
- ^ "Android SDKs für Swift". GitHub. Abgerufen 10. September, 2021.
- ^ "Swift-Lang-Paketversionen". Abgerufen 10. September, 2021.
- ^ Readdle (15. Januar 2020). "Swift für Android: Unsere Erfahrung und Werkzeuge". Mittel. Abgerufen 20. August, 2020.
- ^ Anderson, Tim (30. März 2020). "Offizieller maßgeschneiderter Swift für Windows Support in 5.3: Swift auf weiteren Plattformen - vorausgesetzt, Sie benötigen keine GUI.". Das Register. Abgerufen 18. September, 2020.
- ^ Kremenek, TED (25. März 2019). "Swift 5 veröffentlicht!". Swift.org. Abgerufen 28. März, 2019.
- ^ "Swift herunterladen". Swift.org. Apfel. Abgerufen 15. Dezember, 2020.
- ^ Kremenek, Ted (26. April 2021). "Swift 5.4 veröffentlicht!". Swift.org. Apfel. Abgerufen 26. April, 2021.
- ^ Kremenek, Ted (14. März 2022). "Swift 5.6 veröffentlicht!". Swift.org. Apfel. Abgerufen 14. März, 2022.
- ^ "Release Swift 5.6.1 Release · Apple/Swift". GitHub.
- ^ Metz, Rachel (3. Juni 2014). "Apple sucht einen schnellen Weg, um mehr Entwickler zu locken". Technologieüberprüfung.
- ^ Weber, Harrison (2. Juni 2014). "Apple kündigt 'Swift', eine neue Programmiersprache für macOS & iOS an.". VentureBeat.
- ^ "Vorteile der Verwendung von Swift". themindstudios.com. 24. Februar 2017. Abgerufen 24. Februar, 2017.
- ^ "Schließungen - Die Swift -Programmiersprache (Swift 5.5)". docs.swift.org. Abgerufen 31. August, 2021.
- ^ Macomber, Kyle; Yaskevich, Javel; Gregor, Doug; McCall, John. "Mehrere nachfolgende Schließungen". GitHub. Abgerufen 19. Oktober, 2020.
- ^ Lattner, Chris. "Ermöglichen Sie nachfolgende Schließungen in
bewachen
Bedingungen". GitHub. Abgerufen 19. Oktober, 2020. - ^ "Saiten und Charaktere". Entwickler.apple.com. Apple Inc. Abgerufen 16. Juli, 2014.
- ^ "Zugangskontrolle". Entwickler.apple.com. Apple Inc. Abgerufen 25. Oktober, 2016.
- ^ "Nullable Typen", C# Programmierhandbuch, Microsoft.
- ^ "Typen". Entwickler.apple.com. Apple Inc. Abgerufen 16. Juli, 2014.
- ^ a b "Klassen und Strukturen". Apple.com.
- ^ Guhit, Fiel (14. Februar 2015). "Performance-Fallstudie zu Swift 1.1, Swift 1.2 und Objective-C".
- ^ Bessere Apps mit Werttypen erstellen. Apfel.
- ^ a b c "NSCopying -Protokollreferenz". Apfel.
- ^ "Mit Protokollen arbeiten". Apfel.
- ^ Thompson, Mattt (2. September 2014). "Swift Standard Protocol Implementierungen". Nshipster.
- ^ "Funktionieren Swift-basierte Apps auf macOS 10.9/iOS 7 und niedriger?", Paketüberfluss
- ^ "Verwenden von Swift mit Kakao und Objective-C: Basic Setup". Apple.com. 6. Januar 2015.
- ^ "Swift-Klassen mit Objektivverhalten schreiben", Apple Inc.
- ^ "Migrieren Sie Ihren Objektiv-C-Code in Swift".
- ^ "Swift und Objective-C im selben Projekt", Apple Inc.
- ^ "Apple: Suche" Corelib "". GitHub.
- ^ "Xcode - Swiftui -Apple -Entwickler". Entwickler.apple.com. Abgerufen 1. Februar, 2021.
- ^ "Automatische Referenzzählung", Apple Inc.
- ^ Lanier, Brian; Groff, Joe. "Intermediate Swift". Apfel. Abgerufen 3. Juli, 2014.
- ^ Metz, Cade. "Warum Codierer über Apples neue Programmiersprache verrückt werden". Verdrahtet. Abgerufen 16. Juli, 2014.
- ^ Über Swift, Apple Inc.
- ^ "Schnelle Leistung optimieren". Apple, Inc. Juni 2015.
- ^ "Fehlerhandling in Swift-Sprache". stackoverflow.com.
- ^ "Apfel/Swift-Evolution". GitHub. Abgerufen 4. April, 2016.
- ^ "Apfel/Swift-Evolution". GitHub. Abgerufen 4. April, 2016.
- ^ Barbosa, Greg (22. Februar 2016). "IBM bringt Swift in die Cloud, veröffentlicht Web Framework -Kitura in Apples Programmiersprache.". 9to5mac. Abgerufen 16. Mai, 2016.
- ^ "Server -APIS -Arbeitsgruppe". Swift.org. 25. Oktober 2016. Abgerufen 28. Oktober, 2016.
- ^ "Swift.org". Swift.org. Abgerufen 28. Oktober, 2016.
- ^ "Remobjects Elements Compiler". Abgerufen 17. Januar, 2016.
- ^ Rose, Jordan (1. April 2020). "Swift auf Mac OS 9". -dealloc.