[Swift 5.3] Apprendre d'un Swift Tour Swift [Xcode 12.1] <10/28 en construction>

introduction

(Référence ①) [Une visite rapide] (https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1) ↑ L'article principal sur le site officiel de Swift. (Référence ②) [Introduction à Swift Practice-Développement d'applications iOS pour commencer maintenant! Faisons une simple calculatrice en maintenant la grammaire de base] (https://eh-career.com/engineerhub/entry/2017/05/25/110000) ↑ Pour ceux qui ne sont pas concernés par Swift 5.3. (Référence ③) [[Introduction à Swift] Comprenons le type optionnel] (https://fukatsu.tech/optional-swift) ↑ Pour ceux qui veulent comprendre le type facultatif.

table des matières

fabrication

A Swift Tour "Hello, world!" Quelle que soit la langue que vous apprenez, il y a toujours un programme à créer et à exécuter en premier. C'est un programme qui affiche simplement «Bonjour le monde!» À l'écran. Dans «Swift», écrivez comme suit.

print("Hello, world!")

Ce que vous pouvez voir à partir de ce code est la simplicité de Swift. Dans «Java», qui est le même langage orienté objet que «Swift», écrivez comme suit.

java


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

Même un programme qui affiche simplement "Hello, world!" Pour Java prend 5 lignes, tandis que Swift n'a besoin que d'une ligne. Ni la fonction main () ni le ; (point-virgule) à la fin de la ligne ne sont nécessaires.

Valeurs simples

Déclaration des variables / constantes

Utilisez let pour déclarer ** constant ** et var pour déclarer ** variable **.

Hello,world!


var myVariable = 42  //variable:myVariable = 42
myVariable = 50   //variable:myVariable = 50(Écraser la valeur)
let myConstant = 42  //constant:myConstant = 42

print(myVariable, myConstant)  //Résultat d'exécution: 50 42

Ici, les variables (y compris les constantes) ont le concept de ** type **. Même dans la vie de tous les jours, «entier» est utilisé pour exprimer «25», et dans les articles scientifiques, la précision des valeurs numériques est requise, donc un nombre à virgule flottante unique (flottant; nombre à virgule flottante unique) «・» fois. Par exemple, utilisez le nombre à virgule flottante de précision (double; double nombre à virgule flottante) `.

Classification de type

La liste des types est la suivante. <Note de modification: création / intégration de diagrammes>

Type primitif

Type numérique

Type entier ・ ・ ・ ** Représente un entier **

char (caractère) ・ ・ ・ 0 ~ 65 535 (= 2 ^ 16 ―― 1) octet ・ ・ ・ -128 (= -2 ^ 7) ~ 127 (2 ^ 7-1) court ・ ・ ・ -32.768 (= -2 ^ 15) ~ -32.767 (= 2 ^ 15 --1) int ・ ・ ・ -2.147.483.648 (= -2 ^ 31) ~ 2.147.483.647 (= 2 ^ 31 --1) longue ・ ・ ・ -9,223,372,036,854,775,808 (= -2 ^ 63) ~       9,223,372,036,854,775,807(=2^63 - 1)

Type de nombre à virgule flottante ・ ・ ・ ** Représente un nombre réel **

flotteur ・ ・ ・ ± 3.40282347E + 38 ~ ± 1.40239846E-45 double ・ ・ ・ ± 1.79769313486231507E + 378 ~        ±4.94065645841246544E-324

Type logique (type booléen) ・ ・ ・ ** Représente une valeur logique (vrai ou faux) **

booléen ・ ・ ・ Vrai ou faux

Type de référence

Type de tableau: un ensemble de variables du même type est représenté par []

Type de classe ・ ・ ・ Collectez des méthodes et des données

Type d'interface ・ ・ ・ Mettre en œuvre une méthode

Type nul ・ ・ ・ Ne fait référence à rien

Vous n'avez pas à vous soucier du type soudainement. Au début, vous devez décider de déclarer des entiers avec int, de déclarer des nombres réels avec double, et ainsi de suite.

Caractéristiques de Swift: inférence de type et conversion de type

De plus, le compilateur Swift peut déduire des types à partir de l'initialiseur. Le code ci-dessus vous permet également de déclarer des variables sans définir de type. Bien sûr, vous pouvez également définir explicitement le type (= type annotation), comme dans le code suivant. Il est pratique de faire une inférence de type, mais cela peut aussi causer des ** bogues **, alors essayez de ** définir explicitement le type ** autant que possible.

Définition de type explicite


let implicitInteger = 70   //Implicite(implicit)Définition du type
let implicitDouble = 70.0  //Définition de type implicite
let explicitDouble: Double = 70  //Définition de type explicite

print(implicitInteger, implicitDouble, explicitDouble)
//Résultat d'exécution: 70 70.0 70.0

«Swift» ne convertit pas implicitement un type en un autre type. Par conséquent, si vous écrivez le code suivant, une erreur sera générée.

error


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

print(widthLabel)
//Résultat d'exécution:
// error: binary operator '+' cannot be applied to operands of type 'String' and 'Int'

Vous ne pouvez pas concaténer «String type (= string)» et «Int type (= integer)» avec «+ operator». Vous devez convertir le type int en type chaîne, puis concaténer. La conversion de type est effectuée comme suit.

Conversion de type


let label = "The width is "
let width = 94
let widthLabel = label + String(width)  //Convertir la largeur du type Int en type String

print(widthLabel)
//Résultat d'exécution: The width is 94

Si vous souhaitez incorporer une valeur dans une chaîne, il existe un moyen de l'afficher sans conversion de type. Mettez simplement la valeur entre () et écrivez \ (backslash) juste avant (). Les touches de raccourci pour \ sur Mac sont ⌥ (option) et \.

Incorporation de valeurs dans des chaînes


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)
//Résultat d'exécution:
// I have 3 apples.
// I have 8 pieces of fruit.

Description de la chaîne sur plusieurs lignes

Si vous souhaitez écrire une chaîne qui s'étend sur plusieurs lignes, placez-la entre "" "" (guillemets doubles) `. Si vous entrez «Espace» ou «Tab» pour améliorer la lisibilité, le résultat de sortie inclura également «Espace» ou «Tab». Puisqu'il est entouré de «» »,« Espace »et« Tab »sont également traités comme une chaîne de caractères. Il est moins lisible, mais si vous ne voulez pas qu'il soit inclus dans la sortie, écrivez-le à gauche.

Description de la chaîne sur plusieurs lignes


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

print(quotation)
//Résultat d'exécution:
//   I said "I have 3 apples."
//   And then I said "I have 8 pieces of fruit."

Tableaux et dictionnaires

Pour générer un «tableau» ou un «dictionnaire», placez l'index ou la clé dans «[]». Chaque composant est répertorié avec , (virgule).

Génération de séquences / dictionnaires


//Génération de séquence
var shoppingList = ["catfish", "water", "tulips",]   //Inférence de type
shoppingList += [bread]   //Ajouter des composants(append)
shoppingList[1] = "bottle of water"   //Mises à jour des composants

var wishList: [String] = ["salmon", "soda", "violet",]  //Annotation de type

print(shoppingList[1])
print(shoppingList[3])
print(wishList[0])
//Résultat d'exécution:
// bottle of water
// bread
// salmon

//Génération de dictionnaires
var occupations = [   //Inférence de type
  "Malcolm": "Captain",
  "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"  //Clé"Jayne"Ajouter
occupations["Kaylee"] = "Engineer"  //Clé"Kaylee"Mise à jour

var currency: [String: String] = [  //Annotation de type
  "JPN": "yen",
  "USA": "dollar",
]

print(occupations["Jayne"]?)
print(occupations["Kaylee"]?)
print(currency["USA"]?)
//Résultat d'exécution:
// Public Relations
// Engineer
// dollar

La sortie du composant basée sur l'index de ** array ** est décrite comme print (nom de la variable de tableau [index]), tandis que la sortie de la valeur basée sur la clé de ** dictionary ** est print. (Nom du dictionnaire ["clé"]?) . La raison de l'ajout de ? À la fin lors de l'impression de la valeur du dictionnaire est que la fonctionprint ()n'accepte que la variable de typenon facultative (ne permet pas de faire référence à = nil)comme argument. ..

Caractéristiques de Swift: existence du "type facultatif"

La grande différence entre array et dictionary est ** le" type "de la valeur de retour **. Si vous essayez de sortir un index qui n'existe pas dans le tableau, vous obtiendrez une ** erreur d'exécution **. D'autre part, Dictionary renvoie la valeur de Type facultatif (permet de faire référence à = nil). Vous trouverez ci-dessous un programme de «tableau» et «dictionnaire» conçu pour générer des composants inexistants. Faites attention au résultat de l'exécution.

Différence entre la sortie d'erreur de tableau et de dictionnaire


var errArray = [0, 1, 2,]
print(errArray[3])  //Sortie de composants inexistants
//Résultat d'exécution:
// Fatal error: Index out of range

var errDictionary = [
  "zero": 0,
  "one": 1,
  "two": 2,
]
print(errDictionary["two"])   //Sortie des composants existants
print(errDictionary["three"])  //Sortie de composants inexistants
//Résultat d'exécution:
// Optional(2)  #Invité à déballer la valeur de retour
// nil  #Invité à déballer la valeur de retour

Le dictionnaire produit des ** résultats ** tout en renvoyant une erreur. Cette erreur peut être résolue en écrivant ? À la fin de l'argument de la fonction ** print () et en effectuant une conversion de type (déroulement) de type facultatif en type non facultatif **. Cependant, si vous utilisez print (errDictionary [" three "]?), ** nil n'est pas autorisé même si la valeur est nil **, donc l'erreur d'exécution ** suivante est générée. ** Ça sera fait.

Résultat de sortie d'une variable de type non facultative avec une valeur nulle


Fatal error: Unexpectedly found nil while unwrapping an Optional value

Avantages de l'introduction du type facultatif et comment l'utiliser

Dans Swift, la valeur est essentiellement renvoyée sous la forme de type facultatif. La raison est simple. En introduisant Type facultatif et en en faisant une spécification qui ** renvoie une erreur grammaticale avec le nombre de lignes cibles **, la partie qui peut provoquer un bogue (la ligne contenant = Variable de type facultatif) Ce sera plus facile à identifier.

Il y a d'autres avantages à utiliser le «type facultatif». Le A Swift Tour présente comment utiliser le type facultatif comme suit.

if-let syntaxe


var optionalName: String? = "John Appleseed"
var greeting = "Hello"   //En guise d'initialisation, le message d'accueil est"Hello"je reviendrai

if let name = optionalName {   //Cependant, une personne avec un nom(=Variable optionalName!= nil)Si tu dis bonjour
    greeting = "Hello, \(name)"  // "Hello, (Nom)"Pour revenir avec
}

print(greeting)
//Résultat de sortie:
// Hello, John Appleseed

En dessous de 10/31 - Actuellement en construction Selon la syntaxe «if-let», si la valeur de «Type facultatif» est «nil», la valeur de salutation reste l'initialiseur et contient une certaine valeur.

python



EOT

Recommended Posts

[Swift 5.3] Apprendre d'un Swift Tour Swift [Xcode 12.1] <10/28 en construction>
Appeler les fonctions du langage C depuis Swift
Les débutants en programmation apprennent PHP à partir d'une perspective Java-variables-
Appeler un programme écrit en Swift depuis Processing (Java)