Interview - 10 questions sur Swift. 2e partie

Il reste de moins en moins de temps avant le lancement du cours iOS Developer , donc nous continuons aujourd'hui Ă  publier du matĂ©riel issu des 10 Questions sur la sĂ©rie Swift. La premiĂšre partie peut ĂȘtre lue ici .



Expliquer les génériques dans Swift?


Les génériques (modÚles génériques) vous permettent d'écrire des fonctions et des types flexibles et réutilisables qui peuvent fonctionner avec n'importe quel type. Vous pouvez écrire du code qui évite la duplication et exprime son objectif de maniÚre claire et abstraite.

Les types Array et Dictionary dans Swift sont des collections universelles (génériques).
Dans le code ci-dessous, une fonction universelle pour échanger deux valeurs est utilisée pour une chaßne et un entier. Ceci est un exemple de code réutilisable.

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 

Quels sont les types facultatifs dans swift et quand doivent-ils ĂȘtre utilisĂ©s?


Facultatif (facultatif, «facultatif») dans Swift est le type dans lequel la valeur peut ou non ĂȘtre. Les options sont indiquĂ©es en ajoutant "?" Ă  tout type.

Options d'utilisation de l'option:

  1. Extraits de code qui peuvent échouer (je m'attendais à quelque chose, mais je n'ai rien reçu).
  2. Les objets qui sont actuellement vides mais peuvent devenir quelque chose plus tard (et vice versa).

Un bon exemple d'une option:

Une propriĂ©tĂ© qui peut ou non ĂȘtre prĂ©sente , comme un deuxiĂšme prĂ©nom ou un mari / femme dans la classe Personne.

Une méthode qui peut renvoyer une valeur ou rien , par exemple, une correspondance dans un tableau.

Une méthode qui peut renvoyer un résultat ou une erreur et ne rien retourner , par exemple, essayez de lire le contenu d'un fichier (à la suite de quoi les données du fichier seront généralement renvoyées), mais le fichier n'existe pas.

DĂ©lĂ©guez les propriĂ©tĂ©s qui ne doivent pas toujours ĂȘtre dĂ©finies et gĂ©nĂ©ralement dĂ©finies aprĂšs l'initialisation.

Comme des maillons faibles dans les classes . Ce qu'ils indiquent peut ĂȘtre rĂ©glĂ© Ă  zĂ©ro Ă  tout moment.

Si vous avez besoin d'un moyen de savoir quand la valeur est définie (données non encore chargées> données) au lieu d'utiliser une variable booléenne distincte dataLoaded.

Qu'est-ce que le chaĂźnage optionnel dans Swift?


Les processus de demande, d'appel de propriétés, d'indices et de méthodes pour un facultatif, qui peuvent avoir la valeur «nil», sont définis comme une séquence facultative (chaßne facultative) .

La séquence facultative renvoie deux valeurs -
  • si l'option contient une «valeur», alors lorsque les propriĂ©tĂ©s, mĂ©thodes et indices qui lui sont associĂ©s sont appelĂ©s, la valeur est retournĂ©e
  • si une option contient «nil», toutes les propriĂ©tĂ©s, mĂ©thodes et indices qui lui sont associĂ©s renvoient nil

Une séquence facultative est une alternative au déballage forcé.

Qu'est-ce que le déballage forcé?


Le déballage forcé est un moyen de récupérer la valeur contenue dans une option. Cette opération est dangereuse car vous dites essentiellement au compilateur: je suis sûr que cette option contient une vraie valeur, extrayez-la!

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

Qu'est-ce que le déballage implicite?


Déballage implicite : lorsque nous définissons une option implicitement décompressée, nous définissons un conteneur qui forcera automatiquement le déballage à chaque lecture.

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

Si l'option facultative implicitement dĂ©compressĂ©e est nulle et que vous essayez d'accĂ©der Ă  sa valeur compressĂ©e, vous gĂ©nĂ©rerez une erreur d'exĂ©cution. Le rĂ©sultat est exactement le mĂȘme que si vous avez placĂ© un point d'exclamation aprĂšs l'option facultative habituelle, qui ne contient pas de valeur.

Qu'est-ce que la reliure facultative?


Vous pouvez décompresser les options de maniÚre «sûre» ou «non sécurisée». Un moyen sûr consiste à utiliser des classeurs facultatifs.

La liaison facultative est utilisée pour déterminer si une option contient une valeur, et si c'est le cas, nous rendrons cette valeur disponible sous forme de constante de temps ou de variable. Ainsi, il n'est pas nécessaire d'utiliser un suffixe! pour accéder à sa valeur.

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

Qu'est-ce qu'un Guard et quels sont ses avantages?


La déclaration de guard est simple et puissante. Il vérifie une condition et, s'il est évalué comme faux, l'instruction else est exécutée, ce qui met généralement fin à la méthode.

 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" 

L'avantage de guard est une exécution plus rapide . Guard bloc Guard n'est exécuté que si la condition est fausse et le bloc sera quitté via une instruction de transfert de contrÎle telle que return , break , continue ou thrown . Cela fournit une sortie anticipée et moins de supports. Une sortie anticipée signifie une exécution plus rapide.

Veuillez vous référer à cet article pour plus d'informations.

Quand faut guard let il utiliser le guard let et quand le if let ?

  • Faites guard lorsque vous souhaitez Ă©liminer les entrĂ©es inattendues / incorrectes et concentrez-vous sur l'objectif si vous avez d'autres moyens de gĂ©rer les entrĂ©es.
  • Utilisez else bloc de guard if else pour rĂ©duire l'imbrication et le retrait, car il est relativement compact.

Qu'est-ce que le defer ?


L' defer utilisée pour exécuter un ensemble d'instructions juste avant que l'exécution du code ne quitte le bloc actuel.

L' defer à l'intérieur du bloc if sera exécutée en premier. Ceci est suivi par le modÚle LIFO pour exécuter les instructions de defer restantes.

 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 

Liste des opérateurs de transfert de contrÎle utilisés dans Swift?


break - L'instruction break met immédiatement fin à l'exécution de la totalité de l'instruction de flux de contrÎle.

continue - l'instruction continue indique Ă  la boucle d'arrĂȘter ce qu'elle fait et de recommencer au dĂ©but de la prochaine itĂ©ration de la boucle.
return - renvoie les valeurs des fonctions.
throw - besoin de transfert d'erreur Ă  l'aide des fonctions de lancement
fallthrough - l'instruction fallthrough utilisée dans le bloc de cas de commutateur pour exécuter l'instruction case, qui est à cÎté des instructions case correspondantes en fonction des besoins de l'utilisateur.

Dans swift l'opĂ©rateur fallthrough utilisĂ© pour exĂ©cuter le cas suivant, mĂȘme s'il ne correspond pas Ă  l'original.

 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. 

La fin de la deuxiĂšme partie. La premiĂšre partie peut ĂȘtre lue ici .

Nous attendons vos commentaires et rappelons que dans quelques heures il y aura une journée portes ouvertes , dans le cadre de laquelle nous parlerons en détail de notre cours.

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


All Articles