Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Swift von Grund auf: Wahlmöglichkeiten und Kontrollfluss

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Swift From Scratch.
Swift From Scratch: Collections and Tuples
Swift From Scratch: An Introduction to Functions

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

In den vorherigen Artikeln haben Sie einige grundlegende Konzepte der Programmiersprache Swift kennen gelernt. Wenn Sie schon einmal programmiert haben, haben Sie sicher einige Ähnlichkeiten mit anderen Programmiersprachen wie Ruby, JavaScript und Objective-C gesehen.

In diesem Artikel vergrößern wir den Kontrollfluss in Swift. Bevor wir den Steuerfluss genauer besprechen können, müssen wir uns ein Konzept anschauen, das für die meisten von Ihnen, die Optionale, neu ist. Optionals sind ein weiteres Sicherheitsmerkmal von Swift. Auf den ersten Blick mag die Verwendung von Optionals mühselig erscheinen, aber Sie werden schnell feststellen, dass Optionals Ihren Code wesentlich sicherer machen.

1. Wahlmöglichkeiten

Wir haben bereits gesehen, dass eine Variable initialisiert werden muss, bevor sie verwendet werden kann. Sehen Sie sich das folgende Beispiel an, um besser zu verstehen, was dies bedeutet.

Wenn Sie es gewohnt sind, mit Strings in Objective-C zu arbeiten, werden Sie möglicherweise überrascht sein, dass Swift einen Fehler anzeigt. Mal sehen, was dieser Fehler uns sagt.

In vielen Sprachen haben Variablen einen anfänglichen Standardwert. In Objective-C ist der String im folgenden Code-Snippet beispielsweise gleich nil.

Das Konzept von nil unterscheidet sich jedoch in Swift und Objective-C. Wir werden später etwas näher auf nil eingehen.

Was ist Wahlmöglichkeiten?

Swift verwendet Wahlmöglichkeiten, um ein wichtiges Konzept zu kapseln, d.h. eine Variable oder Konstante hat einen Wert oder nicht. So einfach ist es in Swift. Um eine Variable oder Konstante als optional zu deklarieren, fügen wir dem Typ der Variablen oder Konstante ein Fragezeichen hinzu.

Die Variable str hat nicht mehr den Typ String. Es ist jetzt vom Typ optional String. Das ist wichtig zu verstehen. Das Ergebnis oder der Nebeneffekt ist, dass wir nicht mehr direkt mit dem Wert der str-Variablen interagieren können. Der Wert wird sicher im optionalen Element gespeichert, und wir müssen den optionalen Wert nach dem eingekapselten Wert fragen.

Erzwungenes Auspacken

Eine Möglichkeit, auf den Wert einer Option zuzugreifen, ist das erzwungene Auspacken. Wir können auf den Wert der Variablen str zugreifen, indem Sie ein ! auf den Namen der Variablen.

Es ist wichtig, dass Sie sicher sind, dass das optionale Element einen Wert enthält, wenn Sie das Auspacken erzwingen. Wenn das optionale Element keinen Wert hat und Sie das Auspacken erzwingen, gibt Swift einen Fehler aus.

Optionale Bindung

Es gibt eine sicherere Möglichkeit, auf den Wert eines optionalen Elements zuzugreifen. Wir werden die if-Anweisungen in wenigen Minuten genauer betrachten, aber das folgende Beispiel zeigt, wie wir sicher auf den in der Variablen str gespeicherten Wert zugreifen können, der vom Typ optional String ist.

Wir prüfen zunächst, ob die Variable str gleich nil ist, bevor wir den Inhalt drucken. In diesem Beispiel hat str keinen Wert, was bedeutet, dass er nicht aus Versehen gewickelt werden muss.

Es gibt einen eleganteren Ansatz, der als optionale Bindung bezeichnet wird. Im folgenden Beispiel weisen wir den in der Option gespeicherten Wert einer temporären Konstante zu, die in der if-Anweisung verwendet wird. Der Wert des optionalen str ist an die Konstante strConst gebunden und wird in der if-Anweisung verwendet. Dieser Ansatz funktioniert auch für while-Anweisungen. Dieser Ansatz funktioniert auch für while-Anweisungen.

Was ist nil?

Wenn Sie von Objective-C kommen, wissen Sie mit Sicherheit, was nil ist. In Objective-C ist nil ein Zeiger auf ein Objekt, das nicht vorhanden ist. Swift definiert nil etwas anders und es ist wichtig, dass Sie den Unterschied verstehen.

In Swift bedeutet nil das Fehlen eines Wertes, eines beliebigen Wertes. Während nil nur für Objekte in Objective-C gilt, kann in Swift nil für jeden Typ verwendet werden. Es ist daher wichtig zu verstehen, dass eine Option in Objective-C nicht gleich nil ist. Diese Konzepte sind sehr unterschiedlich.

2. Kontrollfluss

Swift bietet eine Reihe gebräuchlicher Konstrukte zur Steuerung des von Ihnen geschriebenen Codes. Wenn Sie Erfahrung mit der Programmierung haben, haben Sie keine Probleme, sich mit den Kontrollflusskonstrukten von Swift, den bedingten if- und switch-Anweisungen sowie den for- und while-Schleifen vertraut zu machen.

Swift wäre jedoch nicht schnell, wenn sich sein Kontrollfluss nicht leicht von den Kontrollflusskonstrukten von Objective-C unterschied. Die Details sind zwar wichtig, aber ich bin mir sicher, dass sie Sie nicht daran hindern werden, mit Swift Schritt zu halten. Beginnen wir mit dem gebräuchlichsten bedingten Konstrukt, der if-Anweisung.

if

Die if-Anweisungen von Swift sind sehr ähnlich zu denen in Objective-C. Der Hauptunterschied besteht darin, dass die Bedingung nicht in Klammern eingeschlossen werden muss. Geschweifte Klammern sind jedoch obligatorisch. Letzteres verhindert, dass Entwickler häufige Fehler einführen, die sich auf das Schreiben von if-Anweisungen ohne geschweifte Klammern beziehen. So sieht eine if-Anweisung in Swift aus.

Kein Wunder, dass Swift auch eine else-Klausel definiert. Der Code in der else-Klausel wird ausgeführt, wenn die Bedingung gleich false ist. Es ist auch möglich, if-Anweisungen zu verketten, wie im nächsten Beispiel gezeigt.

Es ist eine wichtige Anmerkung zu machen, dh die Bedingung einer if-Anweisung muss true oder false zurückgeben. Dies gilt nicht für if-Anweisungen in Objective-C. Sehen Sie sich die folgende if-Anweisung in Objective-C an.

Wenn wir das obige Code-Snippet auf Swift portieren, stoßen wir auf einen Fehler. Der Fehler ist nicht sehr informativ, aber Swift sagt uns, dass wir sicherstellen müssen, dass das Ergebnis der Bedingung als true oder false ausgewertet wird.

Die korrekte Methode zum Übersetzen des obigen Objective-C-Snippets in Swift besteht darin, sicherzustellen, dass die Bedingung der if-Anweisung true oder false ist, wie im folgenden Snippet.

switch

Die switch-Anweisung von Swift ist leistungsfähiger als das Objective-C-Äquivalent. Es ist auch sicherer, da Sie gleich lernen werden. Obwohl es einige Unterschiede gibt, folgen switch-Anweisungen in Swift demselben Konzept wie in anderen Programmiersprachen. Ein Wert wird an die switch-Anweisung übergeben und mit möglichen Übereinstimmungsmustern verglichen.

Das stimmt, Muster. Wie gesagt, eine switch-Aussage in Swift hat ein paar Tricks im Ärmel. Wir werden uns diese Tricks gleich ansehen. Lassen Sie uns zuerst über Sicherheit sprechen. Lassen Sie uns zuerst über Sicherheit sprechen.

Erschöpfend

Eine switch-Anweisung in Swift muss erschöpfend sein, was bedeutet, dass jeder mögliche Wert des Typs, der an die switch-Anweisung übergeben wird, von der switch-Anweisung verarbeitet werden muss. Wie in Objective-C kann dies leicht durch Hinzufügen eines default-Falls wie im folgenden Beispiel gelöst werden.

Durchfallen

Ein wichtiger Unterschied bei der Implementierung von switch-Anweisungen durch Objective-C ist das Fehlen eines impliziten Durchschlags. Das folgende Beispiel funktioniert aus verschiedenen Gründen in Swift nicht.

Der erste Fall, in dem a mit 0 verglichen wird, gilt nicht implizit für den zweiten Fall, in dem a mit 1 verglichen wird. Wenn Sie das obige Beispiel zu Ihrem Spielplatz hinzufügen, werden Sie feststellen, dass Swift einen Fehler auf Sie wirft. Der Fehler besagt, dass jeder Fall mindestens eine ausführbare Anweisung enthalten muss.

Beachten Sie, dass die Fälle der switch-Anweisung keine break-Anweisungen enthalten, die aus der switch-Anweisung ausbrechen. In Swift ist dies nicht erforderlich, da in Swift kein impliziter Fallthrough vorliegt. Das beseitigt eine Reihe allgemeiner Fehler, die durch unbeabsichtigtes Durchfallen verursacht werden.

Muster

Die Stärke einer switch-Anweisung in Swift liegt im Pattern-Matching. Schauen Sie sich das folgende Beispiel an, in dem ich Bereiche verwendet habe, um den betrachteten Wert mit dem zu vergleichen.

Der Operator ..< oder der halboffene Bereich definiert einen Bereich vom ersten Wert zum zweiten Wert ohne den zweiten Wert. Der Operator ... oder der geschlossene Bereich definiert einen Bereich vom ersten Wert zum zweiten Wert, einschließlich des zweiten Werts. Diese Operatoren sind in vielen Situationen sehr nützlich.

Sie können den betrachteten Wert einer switch-Anweisung auch mit Tupeln vergleichen. Schauen Sie sich das folgende Beispiel an, um zu sehen, wie das funktioniert.

Wie Sie im obigen Beispiel sehen können, ist es möglich, dass der Wert mehr als einem Fall entspricht. In diesem Fall wird der erste passende Fall ausgewählt. Das obige Beispiel veranschaulicht auch die Verwendung des Unterstrichs. Wie wir im vorherigen Artikel gesehen haben, können wir einen Unterstrich _ verwenden, um Swift mitzuteilen, an welchen Werten wir nicht interessiert sind.

Wertebindung

Die Wertebindung ist auch mit switch-Anweisungen möglich, wie das folgende Beispiel zeigt. Der zweite Wert des Tupels ist vorübergehend an die konstante description zur Verwendung im ersten und zweiten Fall gebunden.

for

Die for-Schleife ist das erste Schleifenkonstrukt, das wir uns ansehen. Es verhält sich sehr ähnlich wie bei for-Schleifen in anderen Sprachen. Es gibt zwei Arten, die for-Schleife und die for-in-Schleife.zum

for

Die for-Schleife von Swift ist fast identisch mit einer for-Schleife in Objective-C, wie das folgende Beispiel veranschaulicht. Die for-Schleife führt eine Reihe von Anweisungen aus, bis eine vordefinierte Bedingung erfüllt ist.

Wie bei if-Anweisungen müssen keine Klammern verwendet werden, um die Definitionen der Initialisierung, Bedingung und Inkrementierung der Schleife einzuschließen. Die Anweisungen der Schleife müssen jedoch in geschweifte Klammern eingeschlossen werden.

for-in

Die for-in-Schleife ist ideal, um den Inhalt eines Bereichs oder einer Sammlung zu durchlaufen. Im folgenden Beispiel werden die Elemente eines Arrays durchlaufen.

Wir können auch for-in-Schleifen verwenden, um die Schlüssel-Wert-Paare eines Wörterbuchs zu durchlaufen. Im folgenden Beispiel deklarieren wir ein Wörterbuch und drucken dessen Inhalt auf die Konsole. Wie wir zuvor in dieser Serie gesehen haben, ist die Reihenfolge der Schlüssel-Wert-Paare undefiniert, da ein Wörterbuch eine ungeordnete Menge von Schlüssel-Wert-Paaren ist.

Jedes Schlüsselwertpaar des Wörterbuchs ist in der for-in-Schleife als Tupel benannter Konstanten verfügbar. Die for-in-Schleife eignet sich auch hervorragend für die Kombination mit Reichweiten. Ich bin sicher, Sie stimmen zu, dass das unten abgebildete Snippet dank der Verwendung eines geschlossenen Bereichs einfach zu lesen und zu verstehen ist.

while

Die while-Schleife gibt es auch in zwei Varianten, while und do-while. Der Hauptunterschied besteht darin, dass die Menge der Anweisungen einer do-while-Schleife immer mindestens einmal ausgeführt wird, da die Bedingung des do-while am Ende jeder Iteration ausgewertet wird. . Das folgende Beispiel veranschaulicht diesen Unterschied.

Die println-Anweisung der while-Schleife wird niemals ausgeführt, während die der do-while-Schleife einmal ausgeführt wird.

In vielen Fällen können for-Schleifen als while-Schleifen umgeschrieben werden, und es ist oft Sache des Entwicklers, zu bestimmen, welche Art von Schleife in einer bestimmten Situation verwendet werden soll. Die folgenden for- und while-Schleifen führen zur gleichen Ausgabe.

Erfahren Sie mehr in unserem Swift-Programmierkurs

Wenn Sie daran interessiert sind, Ihre Swift-Ausbildung auf die nächste Stufe zu bringen, können Sie sich unseren gesamten Kurs über Swift-Entwicklung ansehen.

Schlussfolgerung

In Swift gibt es viel mehr Möglichkeiten zur Steuerung des Flusses als in diesem Artikel beschrieben, aber Sie haben jetzt ein grundlegendes Verständnis, um Ihre Reise in Swift fortzusetzen. Ich hoffe, dieses Tutorial hat Ihnen gezeigt, dass die Implementierung des Kontrollflusses in Swift der anderer Programmiersprachen sehr ähnlich ist, jedoch mit einer gewissen Wendung.

In der restlichen Serie werden die Kontrollflusskonstrukte von Swift stärker genutzt, und Sie werden allmählich ein besseres Verständnis für die subtilen Unterschiede mit Sprachen wie Objective-C erhalten. In der nächsten Ausgabe dieser Serie beginnen wir mit der Erkundung von Funktionen

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.