Schnell (Programmiersprache)

Schnell
Swift logo.svg
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; Vor 8 Jahren[2]
Stabile Version
5.6.2[3] Edit this on Wikidata / 15. Juni 2022; Vor 49 Tagen
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 Doppeltund 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, Copywithzonedas 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 GleichwertigBereitstellung 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, und Schalter sind ähnlich, haben aber erweiterte Funktionen, z. B. a Schalter Das erfordert Nichtteger-Fälle, während und wenn Unterstützung Musteranpassung und bedingt entpackenden Optionen, zum verwendet die for 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 von i == 0 Durch das Werfen eines Kompilierungs-Zeit-Fehlers.
    • Keine Notwendigkeit zu verwenden Unterbrechung Aussagen in Schalter Blöcke. Einzelfälle fallen nicht in den nächsten Fall, es sei denn, das durchfallen 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 Eigenschaften Mindest und Max 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 und wä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-Stil zum 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

Verweise

  1. ^ US -Patent Nr. 9329844
  2. ^ "Swift hat 1,0 erreicht". Apfel. 9. September 2014. Abgerufen 8. März, 2015.
  3. ^ https://github.com/apple/swift/releases/tag/swift-5.6.2-release.
  4. ^ "Schnell, objektiv". Swift ist proprietär und geschlossen: Es wird vollständig von Apple kontrolliert und es gibt keine Open -Source -Implementierung.
  5. ^ 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.
  6. ^ 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.
  7. ^ 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.
  8. ^ "Bauen assert () in Swift, Teil 2: __file__ und __line__". Abgerufen 25. September, 2014.
  9. ^ "Einflüsse - die Rostreferenz". doc.rustlang.org. Abgerufen 2. Mai, 2020.
  10. ^ "Der Swift Linux -Port". Swift.org. Apple Inc. 3. Dezember 2015. Abgerufen 3. August, 2016.
  11. ^ Timmer, John (5. Juni 2014). "Ein schneller Blick auf Swift, Apples neue Programmiersprache". ARS Technica. Conde nast. Abgerufen 6. Juni, 2014.
  12. ^ Protokollorientierte Programmierung in Swift. Apple Inc. Youtube.
  13. ^ "Konzepte ähneln Rostmerkmalen".
  14. ^ 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.
  15. ^ "Apples neue Programmiersprache Swift ist jetzt Open Source". Der Verge. 3. Dezember 2015. Abgerufen 5. Dezember, 2015.
  16. ^ "Apple Open Sources schnell im letzten Platz im Unternehmen". CIO Journal. Das Wall Street Journal Blogs. 3. Dezember 2015. Abgerufen 5. Dezember, 2015.
  17. ^ "Rückblick auf Swift 3 und voraus zu Swift 4". Swift -Foren. 29. Juli 2016. Abgerufen 19. November, 2018.
  18. ^ "Swift-Evolution". Schnelle Entwicklung. Abgerufen 19. November, 2018.
  19. ^ "Die Redmonk -Programmierrangliste: Januar 2018 - Tecosystems". Redmonk.com. 7. März 2018. Abgerufen 20. November, 2018.
  20. ^ Kremenek, TED (25. März 2019). "Swift 5 veröffentlicht!".
  21. ^ Kremenek, TED (20. September 2019). "Swift 5.1 veröffentlicht!".
  22. ^ Hudson, Paul (6. Juni 2021). "Was ist neu in Swift 5.5?". Hackingwithswift.com. Hacking mit Swift. Abgerufen 8. Juni, 2021.
  23. ^ a b Plattformen Bundesstaat der Union, Sitzung 102, Apple Worldwide Developers Conference, 2. Juni 2014
  24. ^ Die schnelle Programmiersprache. Apfel. 2. Juni 2014. Abgerufen 2. Juni, 2014.
  25. ^ "Swift hat 1,0 erreicht". 9. September 2014. Abgerufen 10. September, 2014.
  26. ^ "Xcode 6.1 Versionsnotizen". 22. Oktober 2014. Abgerufen 23. Januar, 2015.
  27. ^ "Xcode 6.3 Versionsnotizen". 8. April 2015. Abgerufen 8. April, 2015.
  28. ^ "Swift 2 Apps im App Store". Swift Blog. Abgerufen 13. März, 2016.
  29. ^ "Swift 3.0 veröffentlicht!". Swift.org. 13. September 2016. Abgerufen 26. Oktober, 2016.
  30. ^ "Swift 4.0 veröffentlicht!". Swift.org. 17. September 2017. Abgerufen 1. März, 2018.
  31. ^ "Swift 4.1 veröffentlicht!". Swift.org. 29. März 2018. Abgerufen 30. März, 2018.
  32. ^ "Stack Overflow Developer Survey -Ergebnisse 2015".
  33. ^ "Stack Overflow Developer Umfrageergebnisse 2016".
  34. ^ "Swift.org und Open Source". Swift.org. Apple Inc. Abgerufen 25. Februar, 2019.
  35. ^ "Einführung der IBM Swift Sandbox - Swift". Schnell. Abgerufen 5. Dezember, 2015.
  36. ^ Mayo, Benjamin (4. Dezember 2015). "Schreiben Sie Swift -Code in einem Webbrowser mit der IBM Swift Sandbox". 9to5mac. Abgerufen 5. Dezember, 2015.
  37. ^ "Nachdem Apple es offen bewertet, stellt IBM Swift -Programmierung in die Cloud | ZDNET ein.". ZDNET. Abgerufen 5. Dezember, 2015.
  38. ^ "Swift -Paketkatalog und Swift Sandbox -Abschaltung". Abgerufen 9. November, 2018.
  39. ^ "Swift -Spielplätze". Apple -Entwickler. Abgerufen 19. Juni, 2016.
  40. ^ "Swift -Spielplätze - Vorschau". Apfel. Abgerufen 19. Juni, 2016.
  41. ^ 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.
  42. ^ Cunningham, Andrew (10. Januar 2017). "Langjähriger Apple -Programmierer und Swift Creator lassen Apple für Tesla". ARS Technica.
  43. ^ Wuerthele, Mike (13. Januar 2017). "Der neue Swift -Projektleiter Ted Kremenek soll die Show für einige Zeit hinter den Kulissen führen". Appleinsider.
  44. ^ Daniel Eran Dilger. "WWDC19: Swiftui war der hellste Stern in einer Galaxie neuer Ideen". Appleinsider. Abgerufen 19. Juli, 2019.
  45. ^ "Swift.org - Swift herunterladen". Abgerufen 21. Juni, 2020.
  46. ^ "Android SDKs für Swift". GitHub. Abgerufen 10. September, 2021.
  47. ^ "Swift-Lang-Paketversionen". Abgerufen 10. September, 2021.
  48. ^ Readdle (15. Januar 2020). "Swift für Android: Unsere Erfahrung und Werkzeuge". Mittel. Abgerufen 20. August, 2020.
  49. ^ 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.
  50. ^ Kremenek, TED (25. März 2019). "Swift 5 veröffentlicht!". Swift.org. Abgerufen 28. März, 2019.
  51. ^ "Swift herunterladen". Swift.org. Apfel. Abgerufen 15. Dezember, 2020.
  52. ^ Kremenek, Ted (26. April 2021). "Swift 5.4 veröffentlicht!". Swift.org. Apfel. Abgerufen 26. April, 2021.
  53. ^ Kremenek, Ted (14. März 2022). "Swift 5.6 veröffentlicht!". Swift.org. Apfel. Abgerufen 14. März, 2022.
  54. ^ "Release Swift 5.6.1 Release · Apple/Swift". GitHub.
  55. ^ Metz, Rachel (3. Juni 2014). "Apple sucht einen schnellen Weg, um mehr Entwickler zu locken". Technologieüberprüfung.
  56. ^ Weber, Harrison (2. Juni 2014). "Apple kündigt 'Swift', eine neue Programmiersprache für macOS & iOS an.". VentureBeat.
  57. ^ "Vorteile der Verwendung von Swift". themindstudios.com. 24. Februar 2017. Abgerufen 24. Februar, 2017.
  58. ^ "Schließungen - Die Swift -Programmiersprache (Swift 5.5)". docs.swift.org. Abgerufen 31. August, 2021.
  59. ^ Macomber, Kyle; Yaskevich, Javel; Gregor, Doug; McCall, John. "Mehrere nachfolgende Schließungen". GitHub. Abgerufen 19. Oktober, 2020.
  60. ^ Lattner, Chris. "Ermöglichen Sie nachfolgende Schließungen in bewachen Bedingungen". GitHub. Abgerufen 19. Oktober, 2020.
  61. ^ "Saiten und Charaktere". Entwickler.apple.com. Apple Inc. Abgerufen 16. Juli, 2014.
  62. ^ "Zugangskontrolle". Entwickler.apple.com. Apple Inc. Abgerufen 25. Oktober, 2016.
  63. ^ "Nullable Typen", C# Programmierhandbuch, Microsoft.
  64. ^ "Typen". Entwickler.apple.com. Apple Inc. Abgerufen 16. Juli, 2014.
  65. ^ a b "Klassen und Strukturen". Apple.com.
  66. ^ Guhit, Fiel (14. Februar 2015). "Performance-Fallstudie zu Swift 1.1, Swift 1.2 und Objective-C".
  67. ^ Bessere Apps mit Werttypen erstellen. Apfel.
  68. ^ a b c "NSCopying -Protokollreferenz". Apfel.
  69. ^ "Mit Protokollen arbeiten". Apfel.
  70. ^ Thompson, Mattt (2. September 2014). "Swift Standard Protocol Implementierungen". Nshipster.
  71. ^ "Funktionieren Swift-basierte Apps auf macOS 10.9/iOS 7 und niedriger?", Paketüberfluss
  72. ^ "Verwenden von Swift mit Kakao und Objective-C: Basic Setup". Apple.com. 6. Januar 2015.
  73. ^ "Swift-Klassen mit Objektivverhalten schreiben", Apple Inc.
  74. ^ "Migrieren Sie Ihren Objektiv-C-Code in Swift".
  75. ^ "Swift und Objective-C im selben Projekt", Apple Inc.
  76. ^ "Apple: Suche" Corelib "". GitHub.
  77. ^ "Xcode - Swiftui -Apple -Entwickler". Entwickler.apple.com. Abgerufen 1. Februar, 2021.
  78. ^ "Automatische Referenzzählung", Apple Inc.
  79. ^ Lanier, Brian; Groff, Joe. "Intermediate Swift". Apfel. Abgerufen 3. Juli, 2014.
  80. ^ Metz, Cade. "Warum Codierer über Apples neue Programmiersprache verrückt werden". Verdrahtet. Abgerufen 16. Juli, 2014.
  81. ^ Über Swift, Apple Inc.
  82. ^ "Schnelle Leistung optimieren". Apple, Inc. Juni 2015.
  83. ^ "Fehlerhandling in Swift-Sprache". stackoverflow.com.
  84. ^ "Apfel/Swift-Evolution". GitHub. Abgerufen 4. April, 2016.
  85. ^ "Apfel/Swift-Evolution". GitHub. Abgerufen 4. April, 2016.
  86. ^ Barbosa, Greg (22. Februar 2016). "IBM bringt Swift in die Cloud, veröffentlicht Web Framework -Kitura in Apples Programmiersprache.". 9to5mac. Abgerufen 16. Mai, 2016.
  87. ^ "Server -APIS -Arbeitsgruppe". Swift.org. 25. Oktober 2016. Abgerufen 28. Oktober, 2016.
  88. ^ "Swift.org". Swift.org. Abgerufen 28. Oktober, 2016.
  89. ^ "Remobjects Elements Compiler". Abgerufen 17. Januar, 2016.
  90. ^ Rose, Jordan (1. April 2020). "Swift auf Mac OS 9". -dealloc.

Externe Links