[Swift 5.3] Lernen Sie von einer Swift Tour Swift [Xcode 12.1] <10/28 im Aufbau>

Einführung

(Referenz ①) [Eine schnelle Tour] (https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1) ↑ Der Hauptartikel auf der offiziellen Swift-Website. (Referenz ②) [Einführung in die schnelle Praxisentwicklung von iOS-Apps für den Start! Machen wir einen einfachen Taschenrechner, indem wir die grundlegende Grammatik gedrückt halten.] (https://eh-career.com/engineerhub/entry/2017/05/25/110000) ↑ Für diejenigen, die sich nicht mit Swift 5.3 beschäftigen. (Referenz ③) [[Einführung in Swift] Lassen Sie uns den optionalen Typ verstehen] (https://fukatsu.tech/optional-swift) ↑ Für diejenigen, die den optionalen Typ verstehen möchten.

Inhaltsverzeichnis

Herstellung

A Swift Tour "Hello, world!" Egal welche Sprache Sie lernen, es gibt immer ein Programm, das Sie zuerst erstellen und ausführen müssen. Es ist ein Programm, das nur "Hallo Welt!" Auf dem Bildschirm anzeigt. Schreiben Sie in "Swift" wie folgt.

print("Hello, world!")

Was Sie aus diesem Code sehen können, ist die Einfachheit von "Swift". Schreiben Sie in Java, das dieselbe objektorientierte Sprache wie Swift ist, wie folgt.

java


class Hello {
 public static void main(String[] args) {
  System.out.print("Hello, world!");
 }
}

Sogar ein Programm, das nur "Hallo Welt!" Anzeigt, benötigt für "Java" 5 Zeilen, während "Swift" nur 1 Zeile benötigt. Weder die Funktion main () noch das Semikolon am Ende der Zeile sind erforderlich.

Einfache Werte

Deklaration von Variablen / Konstanten

Verwenden Sie let, um ** Konstante ** zu deklarieren, und var, um ** Variable ** zu deklarieren.

Hello,world!


var myVariable = 42  //Variable:myVariable = 42
myVariable = 50   //Variable:myVariable = 50(Wert überschreiben)
let myConstant = 42  //Konstante:myConstant = 42

print(myVariable, myConstant)  //Ausführungsergebnis: 50 42

Hier haben Variablen (einschließlich Konstanten) das Konzept ** Typ **. Sogar im täglichen Leben wird "Ganzzahl" verwendet, um "25" auszudrücken, und in wissenschaftlichen Arbeiten ist die Genauigkeit numerischer Werte erforderlich, also "einzelne Gleitkommazahl (Gleitkomma; einzelne Gleitkommazahl)" times "mal. Verwenden Sie beispielsweise die Präzisions-Gleitkommazahl (double; double gleitkommazahl) `.

Typklassifizierung

Die Liste der Typen lautet wie folgt. <Hinweis bearbeiten: Diagramme erstellen / einbetten>

Primitiver Typ

Numerischer Typ

Integer-Typ ・ ・ ・ ** Repräsentiert eine Ganzzahl **

char (Zeichen) ・ ・ ・ 0 ~ 65.535 (= 2 ^ 16 ―― 1) Byte ・ ・ ・ -128 (= -2 ^ 7) ~ 127 (2 ^ 7-1) kurz ・ ・ 32 -32.768 (= -2 ^ 15) ~ -32.767 (= 2 ^ 15 -1) int ・ ・ 2 -2,147,483,648 (= -2 ^ 31) ~ 2,147,483,647 (= 2 ^ 31 -1) lang ・ ・ 9 -9,223,372,036,854,775,808 (= -2 ^ 63) ~       9,223,372,036,854,775,807(=2^63 - 1)

Gleitkommazahlentyp ・ ・ ・ ** Stellt eine reelle Zahl dar **

float ・ ・ ・ ± 3.40282347E + 38 ~ ± 1.40239846E-45 doppelt ・ ・ ・ ± 1,79769313486231507E + 378 ~        ±4.94065645841246544E-324

Logischer Typ (boolescher Typ) ・ ・ ・ ** Stellt einen logischen Wert dar (wahr oder falsch) **

Boolescher Wert ・ ・ ・ Richtig oder falsch

Referenztyp

Array-Typ: Eine Reihe von Variablen desselben Typs wird durch [] dargestellt

Klassentyp ・ ・ ・ Sammeln Sie Methoden und Daten

Schnittstellentyp ・ ・ ・ Implementieren Sie eine Methode

Null-Typ ・ ・ ・ Bezieht sich auf nichts

Sie müssen sich nicht plötzlich um den Typ sorgen. Zuerst sollten Sie sich entscheiden, Ganzzahlen mit "int" zu deklarieren, reelle Zahlen mit "double" zu deklarieren und so weiter.

Merkmale von Swift: Typinferenz und Typkonvertierung

Außerdem kann der "Swift" -Compiler Typen aus dem "Initialisierer" ableiten. Mit dem obigen Code können Sie auch Variablen deklarieren, ohne einen Typ zu definieren. Natürlich können Sie den Typ (= Typanmerkung) auch explizit definieren, wie im folgenden Code. Es ist praktisch, eine Typinferenz durchzuführen, aber es kann auch ** Fehler ** verursachen. Versuchen Sie daher, den Typ ** so explizit wie möglich zu definieren.

Explizite Typdefinition


let implicitInteger = 70   //Implizit(implicit)Typdefinition
let implicitDouble = 70.0  //Implizite Typdefinition
let explicitDouble: Double = 70  //Explizite Typdefinition

print(implicitInteger, implicitDouble, explicitDouble)
//Ausführungsergebnis: 70 70.0 70.0

`Swift` konvertiert einen Typ nicht implizit in einen anderen Typ. Wenn Sie den folgenden Code schreiben, wird daher ein Fehler ausgegeben.

error


let label = "The width is "
let width = 94
let widthLabel = label + width

print(widthLabel)
//Ausführungsergebnis:
// error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'

Sie können "String type (= string)" und "Int type (= integer)" nicht mit dem Operator "+" verketten. Sie müssen den Int-Typ in den String-Typ konvertieren und dann verketten. Die Typkonvertierung wird wie folgt durchgeführt.

Typkonvertierung


let label = "The width is "
let width = 94
let widthLabel = label + String(width)  //Konvertieren Sie die Breite des Int-Typs in den String-Typ

print(widthLabel)
//Ausführungsergebnis: The width is 94

Wenn Sie einen Wert in eine Zeichenfolge einbetten möchten, können Sie ihn ohne Typkonvertierung anzeigen. Fügen Sie einfach den Wert in "()" ein und schreiben Sie "\ (Backslash)" kurz vor "()". Die Tastenkombinationen für \ auf dem Mac sind ⌥ (Option) und \.

Einbetten von Werten in Zeichenfolgen


let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."

print(appleSummary)
print(fruitSummary)
//Ausführungsergebnis:
// I have 3 apples.
// I have 8 pieces of fruit.

Mehrzeilige Zeichenfolgenbeschreibung

Wenn Sie eine Zeichenfolge schreiben möchten, die mehrere Zeilen umfasst, fügen Sie sie in "" (doppeltes Anführungszeichen) ein. Wenn Sie "Space" oder "Tab" eingeben, um die Lesbarkeit zu verbessern, enthält das Ausgabeergebnis auch "Space" oder "Tab". Da es in "" "eingeschlossen ist, werden" Space "und" Tab "ebenfalls als eine Zeichenfolge behandelt. Es ist weniger lesbar, aber wenn Sie nicht möchten, dass es in die Ausgabe aufgenommen wird, schreiben Sie es links.

Mehrzeilige Zeichenfolgenbeschreibung


let quotation = """
  I said "I have \(apples) apples."
  And then I said "I have \(apples + oranges) pieces of fruit."
"""

print(quotation)
//Ausführungsergebnis:
//   I said "I have 3 apples."
//   And then I said "I have 8 pieces of fruit."

Arrays und Wörterbücher

Um ein "Array" oder "Wörterbuch" zu generieren, fügen Sie den Index oder Schlüssel in "[]" ein. Jede Komponente wird mit ", (Komma)" aufgelistet.

Sequenz- / Wörterbuchgenerierung


//Sequenzgenerierung
var shoppingList = ["catfish", "water", "tulips",]   //Typinferenz
shoppingList += [bread]   //Komponenten hinzufügen(append)
shoppingList[1] = "bottle of water"   //Komponentenaktualisierungen

var wishList: [String] = ["salmon", "soda", "violet",]  //Geben Sie eine Anmerkung ein

print(shoppingList[1])
print(shoppingList[3])
print(wishList[0])
//Ausführungsergebnis:
// bottle of water
// bread
// salmon

//Generierung von Wörterbüchern
var occupations = [   //Typinferenz
  "Malcolm": "Captain",
  "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"  //Schlüssel"Jayne"Hinzufügen
occupations["Kaylee"] = "Engineer"  //Schlüssel"Kaylee"Aktualisieren

var currency: [String: String] = [  //Geben Sie eine Anmerkung ein
  "JPN": "yen",
  "USA": "dollar",
]

print(occupations["Jayne"]?)
print(occupations["Kaylee"]?)
print(currency["USA"]?)
//Ausführungsergebnis:
// Public Relations
// Engineer
// dollar

Die Ausgabe der Komponente basierend auf dem Index von ** array ** wird als print (Name der Arrayvariablen [index]) beschrieben, während die Ausgabe des Werts basierend auf dem Schlüssel von ** dictionary ** print ist. (Wörterbuchname ["Schlüssel"]?) . Der Grund für das Hinzufügen von "?" Am Ende beim Drucken des Werts des Wörterbuchs besteht darin, dass die Funktion "print ()" nur nicht optionale Variablen vom Typ "(erlaubt keinen Verweis auf = nil)" als Argumente akzeptiert. ..

Merkmale von Swift: Existenz des "optionalen Typs"

Der große Unterschied zwischen "Array" und "Wörterbuch" ist ** der "Typ" des Rückgabewerts **. Wenn Sie versuchen, einen Index auszugeben, der nicht im Array vorhanden ist, wird ein ** Laufzeitfehler ** angezeigt. Andererseits gibt Dictionary den Wert von Optional type (erlaubt den Verweis auf = nil) aus. Unten finden Sie ein Programm aus "Array" und "Wörterbuch", mit dem nicht vorhandene Komponenten ausgegeben werden können. Achten Sie auf das Ausführungsergebnis.

Unterschied zwischen Array- und Wörterbuchfehlerausgabe


var errArray = [0, 1, 2,]
print(errArray[3])  //Ausgabe nicht vorhandener Komponenten
//Ausführungsergebnis:
// Fatal error: Index out of range

var errDictionary = [
  "zero": 0,
  "one": 1,
  "two": 2,
]
print(errDictionary["two"])   //Ausgabe vorhandener Komponenten
print(errDictionary["three"])  //Ausgabe nicht vorhandener Komponenten
//Ausführungsergebnis:
// Optional(2)  #Aufforderung zum Auspacken des Rückgabewerts
// nil  #Aufforderung zum Auspacken des Rückgabewerts

Das Wörterbuch gibt ** Ergebnisse ** aus, während ein Fehler ausgegeben wird. Dieser Fehler kann behoben werden, indem am Ende des Arguments der Funktion ** print () ? Geschrieben und eine Typkonvertierung (Unwrap) von Optional type in non-Optional type ** durchgeführt wird. Wenn Sie jedoch print (errDictionary [" three "]?) Verwenden, ist ** nil nicht zulässig, obwohl der Wert nil ** ist, sodass der folgende ** Laufzeitfehler ausgegeben wird. ** Es wird gemacht.

Ausgabeergebnis einer nicht optionalen Typvariablen mit dem Wert nil


Fatal error: Unexpectedly found nil while unwrapping an Optional value

Vorteile der Einführung des optionalen Typs und seiner Verwendung

In Swift wird der Wert grundsätzlich als Optionaler Typ zurückgegeben. Der Grund ist einfach: Durch die Einführung von "Optionaler Typ" und die Angabe einer Spezifikation, die ** einen Grammatikfehler mit der Anzahl der Zielzeilen ** zurückgibt, wird der Teil angegeben, der einen Fehler verursachen kann (die Zeile mit = "Optionale Typvariable"). Es wird einfacher zu identifizieren sein.

Die Verwendung des optionalen Typs bietet weitere Vorteile. Die "A Swift Tour" führt wie folgt in die Verwendung des "optionalen Typs" ein.

if-Syntax lassen


var optionalName: String? = "John Appleseed"
var greeting = "Hello"   //Als Initialisierung ist die Begrüßung"Hello"ich komme wieder

if let name = optionalName {   //Allerdings eine Person mit einem Namen(=Variable optionalName!= nil)Wenn du hallo sagst
    greeting = "Hello, \(name)"  // "Hello, (Name)"Um mit zurückzukehren
}

print(greeting)
//Ausgabeergebnis:
// Hello, John Appleseed

Unter 10/31-Derzeit im Bau Gemäß der "if-let" -Syntax bleibt der Wert der Begrüßung der Initialisierer und enthält einen Wert, wenn der Wert von "Optional type" "nil" ist.

python



EOT

Recommended Posts

[Swift 5.3] Lernen Sie von einer Swift Tour Swift [Xcode 12.1] <10/28 im Aufbau>
Rufen Sie C-Sprachfunktionen von Swift aus auf
Programmieranfänger lernen PHP aus einer Java-Perspektive.
Rufen Sie ein in Swift geschriebenes Programm von Processing (Java) auf.