Interview - 10 Fragen zu Swift. Teil 2

Bis zum Start des Kurses „iOS Developer“ bleibt immer weniger Zeit. Daher veröffentlichen wir heute weiterhin Material aus der Reihe „10 Fragen zu Swift“. Der erste Teil davon kann hier gelesen werden .



Generika in Swift erklÀren?


Mit Generics (generischen Vorlagen) können Sie flexible, wiederverwendbare Funktionen und Typen schreiben, die mit jedem Typ arbeiten können. Sie können Code schreiben, der Doppelarbeit vermeidet und seinen Zweck klar und abstrakt ausdrĂŒckt.

Die Array- und Dictionary-Typen in Swift sind universelle Sammlungen (Generika).
Im folgenden Code wird eine universelle Funktion zum Austauschen von zwei Werten fĂŒr eine Zeichenfolge und eine Ganzzahl verwendet. Dies ist ein Beispiel fĂŒr wiederverwendbaren Code.

func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } var num1 = 4 var num2 = 5 var str1 = “a” var str2 = “b” swapTwoValues(&num1,&num2) swapTwoValues(&str1,&str2) print (“num1:”, num1) //output: 5 print (“num2:”, num2) //output: 4 print (“str1:”, str1) //output: b print (“str2:”, str2) //output: a 

Was sind optionale Typen in Swift und wann sollten sie verwendet werden?


Optional (optional, „optional“) in Swift ist der Typ, in dem der Wert sein kann oder nicht. Optionen werden durch HinzufĂŒgen von "?" zu jedem Typ.

Optionen fĂŒr die Verwendung des optionalen:

  1. Code-Schnipsel, die möglicherweise fehlschlagen (ich habe etwas erwartet, aber nichts erhalten).
  2. Objekte, die derzeit leer sind, aber spÀter etwas werden können (und umgekehrt).

Ein gutes Beispiel fĂŒr eine Option:

Eine Eigenschaft, die vorhanden sein kann oder nicht , z. B. ein zweiter Vorname oder Ehemann / Ehefrau in der Personenklasse.

Eine Methode, die entweder einen Wert oder nichts zurĂŒckgeben kann , z. B. eine Übereinstimmung in einem Array.

Eine Methode, die entweder ein Ergebnis oder einen Fehler zurĂŒckgeben und nichts zurĂŒckgeben kann, versucht beispielsweise, den Inhalt einer Datei zu lesen (aufgrund dessen normalerweise Dateidaten zurĂŒckgegeben werden), aber die Datei existiert nicht.

Delegieren Sie Eigenschaften , die nicht immer festgelegt werden mĂŒssen und normalerweise nach der Initialisierung festgelegt werden.

Wie schwache Glieder im Unterricht . Was sie anzeigen, kann jederzeit auf Null gesetzt werden.

Wenn Sie herausfinden möchten, wann der Wert festgelegt ist (Daten noch nicht geladen> Daten), anstatt eine separate boolesche Variable dataLoaded zu verwenden.

Was ist optionale Verkettung in Swift?


Die Prozesse zum Anfordern, Aufrufen von Eigenschaften, Indizes und Methoden fĂŒr eine Option, die den Wert "nil" haben können, werden als optionale Sequenz (optionale Kette) definiert .

Die optionale Sequenz gibt zwei Werte zurĂŒck -
  • Wenn die Option einen „Wert“ enthĂ€lt, wird der Wert zurĂŒckgegeben, wenn die damit verbundenen Eigenschaften, Methoden und Indizes aufgerufen werden
  • Wenn ein optionales Element "nil" enthĂ€lt, geben alle damit verbundenen Eigenschaften, Methoden und Indizes nil zurĂŒck

Eine optionale Sequenz ist eine Alternative zum erzwungenen Auspacken.

Was ist erzwungenes Auspacken?


Das erzwungene Entpacken ist eine Möglichkeit, den in einem optionalen Wert enthaltenen Wert abzurufen . Diese Operation ist gefÀhrlich, weil Sie dem Compiler im Wesentlichen sagen: Ich bin sicher, dass diese Option einen echten Wert enthÀlt, extrahieren Sie ihn!

 let value: Int? = 1 let newValue: Int = value! //  newValue  1 let anotherOptionalInt: Int? = nil let anotherInt = anotherOptionalInt! // Output:fatal error:  nil    . 

Was ist implizites Auspacken?


Implizites Entpacken : Wenn wir eine implizit entpackte Option definieren, definieren wir einen Container, der das Entpacken bei jedem Lesen automatisch erzwingt.

 var name: String! = “Virat” let student = name //       name = nil let player = name //Output:fatal error:  nil    . 

Wenn die implizit entpackte Option Null ist und Sie versuchen, auf den gepackten Wert zuzugreifen, wird ein Laufzeitfehler ausgegeben. Das Ergebnis ist genau das gleiche, als hĂ€tten Sie ein Ausrufezeichen nach dem ĂŒblichen optionalen Zeichen gesetzt, das keinen Wert enthĂ€lt.

Was ist optionale Bindung?


Sie können Optionen auf "sichere" oder "unsichere" Weise entpacken. Ein sicherer Weg ist die Verwendung optionaler Bindemittel.

Die optionale Bindung wird verwendet, um zu bestimmen, ob eine Option einen Wert enthĂ€lt. In diesem Fall stellen wir diesen Wert als Zeitkonstante oder Variable zur VerfĂŒgung. Es ist also nicht erforderlich, ein Suffix zu verwenden! um auf seinen Wert zuzugreifen.

 let possibleString: String? = "Hello" if let actualString = possibleString { //actualString -  ( )   // ,   possibleString print(actualString) } else { //possibleString   ,   // } 

Was ist eine Guard und was sind ihre Vorteile?


Die guard ist einfach und kraftvoll. Es ĂŒberprĂŒft eine Bedingung und wenn sie als falsch ausgewertet wird, wird die else-Anweisung ausgefĂŒhrt, die normalerweise die Methode beendet.

 func addStudent(student: [String: String]) { guard let name = student["name"] else { return } print("Added \(name)!") guard let rollNo = student ["rollNo"] else { print("roll No not assigned") return } print("Assigned roll no is \(rollNo).") } addStudent(student: ["name": "Ravi"]) //  "Added Ravi!" //  "roll No not assigned" addStudent(student: ["name": "Ravi", "rollNo": "1"]) //  "Added Ravi!" //  "Assigned roll no is 1" 

Der Vorteil von guard ist eine schnellere AusfĂŒhrung . Guard Block wird nur ausgefĂŒhrt, wenn die Bedingung falsch ist und der Block durch eine SteuerĂŒbertragungsanweisung wie return , break , continue oder thrown . Dies bietet einen frĂŒhen Ausstieg und weniger Klammern. Ein vorzeitiger Ausstieg bedeutet eine schnellere AusfĂŒhrung.

Weitere Informationen finden Sie in diesem Artikel.

Wann sollte der guard let verwendet werden und wann if let ?

  • Verwenden Sie guard wenn Sie unerwartete / falsche Eingaben vermeiden möchten, und konzentrieren Sie sich auf das Ziel, wenn Sie alternative Möglichkeiten fĂŒr den Umgang mit Eingaben haben.
  • Verwenden Sie den guard if else blockiert, um Verschachtelung und Einkerbung zu reduzieren, da er relativ kompakt ist.

Was ist defer ?


Die defer verwendet, um eine Reihe von Anweisungen auszufĂŒhren, kurz bevor die CodeausfĂŒhrung den aktuellen Block verlĂ€sst.

Die defer im if Block wird zuerst ausgefĂŒhrt. Darauf folgt das LIFO-Muster, um die verbleibenden defer Anweisungen auszufĂŒhren.

 func doSomething() { defer { print(“1”)} defer { print(“2”)} defer { print(“3”)} if 1<2 { defer { print("1<2")} } defer { print(“4”)} defer { print(“5”)} defer { print(“6”)} }  1<2 6 5 4 3 2 1 

Auflisten, welche SteuerĂŒbertragungsoperatoren in Swift verwendet werden?


break - Die break Anweisung beendet die AusfĂŒhrung der gesamten Kontrollflussanweisung sofort.

continue - Die continue Anweisung weist die Schleife an, zu stoppen, was sie tut, und am Anfang der nÀchsten Iteration der Schleife erneut zu beginnen.
return - gibt Werte von Funktionen zurĂŒck.
throw - Fehlerweiterleitung mit Wurffunktionen erforderlich
fallthrough - Die fallthrough Anweisung fallthrough im switch case-Block verwendet, um die case-Anweisung auszufĂŒhren, die sich basierend auf den Benutzeranforderungen neben den entsprechenden case-Anweisungen befindet.

In swift der fallthrough Operator verwendet, um den nĂ€chsten Fall auszufĂŒhren, auch wenn er nicht mit dem Original ĂŒbereinstimmt.

 let integerToDescribe = 5 var description = “The number \(integerToDescribe) is” switch integerToDescribe { case 2, 3, 5, 7, 11, 13, 17, 19: description += “ a prime number, and also” fallthrough case 10: description += “ case 10.” default: description += “ an integer.” } print(description)// :The number 5 is a prime number, and also case 10. 

Das Ende des zweiten Teils. Der erste Teil kann hier gelesen werden .

Wir warten auf Ihre Kommentare und erinnern uns, dass es in wenigen Stunden einen Tag der offenen TĂŒr geben wird , in dessen Rahmen wir ausfĂŒhrlich ĂŒber unseren Kurs sprechen werden.

Source: https://habr.com/ru/post/de452806/


All Articles