Geben Sie Sicherheit in Swift

Swift Geräte Typsicherheit

, was im Grunde bedeutet, dass Sie nicht eine Variable unpassend für den Bedingungen seiner Art verwenden können. Mit anderen Worten, nach den Regeln des Typs Sicherheit können Sie durch Null teilen - das ist keine Art Fehler - aber man kann eine arithmetische Operation mit einer Zeichenkette nicht durchführen, wenn Sie ein paar Umsetzungen zuerst tun.

Typsicherheit kann in einer Sprache Beschreibung beschrieben werden und wird in einer Entwicklungsumgebung wie Xcode- erzwungen es kann auch bei sorgfältiger Programmierung durchgesetzt werden. Das ist ein Teil des Problems: Ohne erzwungene Typsicherheit, es ist sehr leicht zu rutschen und unsicheren Code erstellen.

In vielen Umgebungen kann unsicheren Code nicht das erste Mal, wenn Sie es laufen - das ist das Best-Case-Szenario. Leider ist die häufigste Szenario, dass der Code zu verschiedenen Zeiten fehlschlägt. Oft sein Scheitern hat mit dem Speicher der App zu tun hat, mit zu arbeiten, so dass der unsicheren Code kann in Abhängigkeit von fehlschlagen, was andere Anwendungen oder Funktionen zu dem Zeitpunkt ausgeführt werden.

Lassen die Entwicklungsumgebung Typsicherheit Durchsetzung ist der sicherste Weg, diese Probleme zu verarbeiten. (Unter Berufung auf die guten Absichten der Menschen ist leider nicht immer die klügste Wahl.)

Die Swift-Sprachspezifikation beschreibt seine Art Sicherheit als Teil der sprach- die gesamte Sprachspezifikation durch den Compiler sowie von der Xcode-Entwicklungsumgebung erzwungen wird. Im allgemeinen Sprachgebrauch, aber die Leute sagen oft Dinge wie # 147-Swift erzwingt Sicherheit geben # 148.

In der Tat bietet Swift nur die spezifikations es ist Xcode und die LLVM-Compiler, der die Durchsetzung tun. Dennoch, es sei denn es einen Grund gibt einen Unterschied zwischen dem Swift-Spezifikation und deren Umsetzung in Xcode und dem Compiler zu machen, wird in diesem Buch auf eine allgemeine Weise zu Swift.

Swift nimmt zwei Ansätze zur Typsicherheit Durchsetzung: Coding-Standards zu verschärfen und Typen Folgern. Es nutzt andere Ansätze als auch, aber diese sind die größten.

Anzugskodierungsstandards

Es ist seit langem ein Trade-off (einige Leute es nennen würde eine Schlacht) Zwischen den Codierungsverfahren der strengen und lose Typisierung von Variablen. Strikte Typisierung ist mehr Mühe, und es kann zu vage typisierte Variablen Fehler wie den Compiler-Objekte verursachen kompilieren. Lose Typisierung ist einfacher zu schreiben und verursacht weniger Compiler-Fehler, aber es kann mehr Laufzeitfehler und Abstürze verursachen.

Swift strafft Coding-Standards. Zu einem großen Teil bestehen diese Anforderungen an die sprachliche Einschränkungen, die unsicheren Code zu verhindern. Hier sind einige der Art Sicherheitsmaßnahmen, die Swift in Stelle setzt und erzwingt:

  • Zeiger: Zeiger können Sie Speicher direkt zugreifen, die auf alle Arten von Problemen führen kann. Die grundlegende Objective-C-Syntax für eine Instanz einer Klasse Zugriff beinhaltet einen Zeiger: Dies ist nicht der Fall mit Swift ist.

    Wenn Sie eine Instanz einer Klasse erklären, wie UIView in Objective-C, tun Sie dies mit Code wie UIView * myView. Das Sternchen zeigt an, dass Sie mit einem Zeiger arbeiten (das ist das gute alte C-Syntax). Wenn Sie zu Objective-C verwendet werden, die meisten dieser Sterne sind Geschichte für Sie. Die Ausnahme ist, wenn Sie Objective-C und Swift mischen.

  • Initialisierung: Variablen müssen in Swift vor der Verwendung initialisiert werden. Es gibt keine Möglichkeit nicht initialisierten Variablen in Swift zu verwenden.

  • Nein nil: In anderen Sprachen Null wird oft einen Wert zu schaffen, die getestet werden können, um zu sehen, ob ein Objekt existiert verwendet. In Swift wird diese mit optionalen Arten behandelt.

  • Speicherverwaltung und Überlaufprüfung: Swift hat Objective-C-Funktionen implementiert mit erweiterten Compiler Verhaltensweisen wie Automatische Referenzzählung (ARC) geerbt.

Die Folgerung der Arten

Da Swift erfordert Variablen (und Konstanten) vor der Verwendung initialisiert werden, müssen die Compiler und Runtime-Bibliothek immer einen Wert für jede Variable. Aus diesem Wert kann Swift einen Typ ableiten, ohne sie angeben zu müssen. Mit anderen Worten, können Sie den Typ für jede Variable angeben, aber Sie nicht zu tun haben, wenn diese Variable mit einem Wert initialisiert wird, von dem Swift den Typ ableiten kann.

Arrays und Wörterbücher in Swift müssen Instanzen des gleichen Typs enthalten. Wenn Sie also ein Array oder ein Wörterbuch zu erstellen, müssen Sie entweder explizit den Typ angeben oder Anfangswerte liefern, so dass Swift den Typ des Arrays oder Wörterbuch entnehmen kann. In jedem Fall kann Swift den Typ der Werte in dem Array oder Wörterbuch bestimmen.

Wenn Sie mit Klassen und Unterklassen zu tun haben, möchten Sie vielleicht einen expliziten Typ zu verwenden. Wenn Ihr Array oder Wörterbuch schließlich Instanzen von Subklassen einer Klasse enthalten wird, können Sie es mit mehreren dieser Subklassen initialisieren.

eine Anordnung zum Beispiel, die enthält verschiedene Instanzen UIView Unterklassen können mit einem oder mehreren initialisiert werden, UILabel Instanzen. Jedoch gibt es keine Möglichkeit, Swift ableiten könnte UIView von Instanzen, die enthält nicht alle möglichen UIView Unterklassen. Also, wenn Sie sich bewusst sind, dass Sie (sagen wir) hinzufügen werden möchten UIButton später Fällen können Sie explizit bevorzugen, um das Array eingeben, wie UIView so alle der UIView Unterklasse Instanzen sind willkommen.

Menü