(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.
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.
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) `.
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.
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
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.
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."
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. ..
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
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
python
EOT