Bonjour,
Je suis sur la partie App 3, et je suis tombé sur ce constructeur que je ne comprends pas :
init?(fromData personnData:[String:AnyObject]) {
guard let sName = personnData ["name"] as? String,
let sEmail = personnData ["email"] as? String,
let sPhone = personnData ["phone"] as? String
else {
return nil
}
name = sName
email = sEmail
phone = sPhone
}
1/ Les parametres de l’initialiseur… Comment il s’utilise lorsque je souhaite créer un objet ?
2 / L’instruction guard let... else
, à quoi correspond t-elle ?
3/ Question subsidiaire : Pourquoi est-il sous la forme d’un optionnel (init?)
Encore merci pour le coup de pouce
Salut,
En espérant ne pas dire de bêtises :
1/ Swift permet de définir deux noms pour un paramètre de fonction : un externe (le premier, que tu utilises en appelant la fonction), et un interne. (que tu retrouves donc dans le bloc de la fonction elle-même
2/ Guard let permet de vérifier ton/tes optionnel(s). Dans le cas présent, si une des trois variables testées n’est pas conforme à ce qui est attendu, tu rentres dans le bloc else. Si tout va bien, tu vas directement à la suite de ce bloc et assigne donc ces variables à ton instance.
3/ Les données étant récoltées ailleurs, ici en ligne si c’est bien via Alamofire, il peut ne rien avoir à récolter lors de la tentative d’instanciation de l’objet. Je suppose que sans l’optionnel ça crash, alors que tu peux juste vouloir que le tableau soit vide s’il n’y a rien à afficher.
A prendre avec des pincettes en attendant de meilleures explications, notamment pour le dernier point.
Ju
2 « J'aime »
Salut Ju et merci pour ces informations.
Pour les points 2 et 3, j’ai compris, par contre le point 1 reste encore flou.
Je vais poursuivre le tuto pour voir comment il l’utilise…
Encore merci à toi
En fait, ta fonction qui est appelée comme ça :
init?(fromData personData:[String:AnyObject]) {
Dans ta fonction tu vas utiliser le paramètre personData pour récupérer les informations.
Par contre, quand tu vas l’appeler depuis un autre endroit, tu vas utiliser
let class = Class(fromData:data)
Par exemple.
C’est une question d’esthétique et de facilité de lecture du code.
1 « J'aime »
Salut Yann
Merci pour ce complément d’info… C’est ce que j’ai pu constaté en bidouillant un peu.
Et il est vrai que c’est beaucoup plus simple à implémenter, surtout si l’objet en question possede beaucoup de paramètre.
En tout cas merci pour votre coup de pouce
1 « J'aime »
@maxime.britto
Bonjour Maxime,
Petite question, est ce que les vidéos 1 et 2, dans la partie “App 3” ne sont pas inversées ???
Je dis ça, car tu expliques dans la vidéo 2 le constructeur qui m’a “surprit” présent dans la video 1…
1 « J'aime »
J’en profite pour rebondir sur le point N°2.
Quelle est la différence fondamentale entre if let else
… et guard let else
?
La différence fondamentale tient à la durée d’existence de la variable temporaire non-optionnelle
if let else
func faireQuelqueChose(texte:String?) {
if let aTexte = texte {
// aTexte existe ici
}
// aTexte n'existe plus ici
// ...
}
guard let else
func faireQuelqueChose(texte:String?) {
guard let aTexte = texte
else return { }
// aTexte existe dans tout le corps de la fonction
// ...
}
2 « J'aime »
Ah oui bien vu @Draken !
Je n’avais pas pensé à la portée de la constante
Merci pour l’info
Ah mince, tu as carrément raison ! Les vidéos 2 et 3 sont inversées
Je vais corriger ça de suite !
1 « J'aime »
@mbritto j’essaie de faire preuve d’une écoute active
1 « J'aime »