Swift, init et propriétés
muqaddar
Administrateur
En objective-C, on avait l'habitude que les variables créées automatiquement correspondant aux propriétés aient un underscore devant.
Ainsi, on faisait un init ainsi:
@property (strong) NSString *item;
- (id)initWithItem:(NSString*)item
{
_item = item;
}
En Swift, ce n'est plus le cas. Faut-il utiliser la variable d'instance ou le setter du coup dans le init() ?
var item:String?
init(anItem: String)
{
item = anItem
OU
self.item = anItem
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En Swift il n'y a pas de variable d'instance, ce ne sont que des propriétés.
self.item ou item c'est exactement pareil. Quand tu écris juste "item", le "self." est implicite/inféré.
(c'est aussi expliqué quand ils parlent des closures et du fait que Swift t'impose dans les closures à utiliser explicitement "self." pour te rappeler que self est alors capturé par la closure)
Et au passage, c'est magique, comme expliqué dans les vidéos, Swift, t'assure que dans le init() les setters et getters ne seront pas appelés, ne risquant pas de déclencher un éventuel KVO (willSet/didSet) quand tu es dans la méthode init().
Donc en bref dans ton init() tu peux utiliser "item = anItem" ou "self.item = anItem" c'est exactement équivalent et générera le même code.
Du coup il est conseillé pour la concision d'utiliser directement "item = anItem", et de n'utiliser "self.item" que quand la désambiguation est vraiment nécessaire (autrement dit si tu choisissais de nommer ton paramètre aussi "item" au lieu de "anItem")
Au final, fini les prises de tête sur "faut que je fasse attention à appeler la variable d'instance dans le init et le setter partout ailleurs dans mon code" comme en ObjC. Là tu peux utiliser partout "item" ou "self.item" au choix et c'est le compilo Swift qui est suffisamment puissant pour appeler le setter/getter partout... sauf dans le cas particulier des méthodes d'init.
Ah ok, j'ai fini la première vidéo et attaqué la intermediate, et ils n'en ont pas encore parlé...
ça c'est super en effet !
ok, c'est très clair et limpide (et bien vu).
Salut,
AliGator de quelle vidéo parle tu ? (sur nos compte Dev ?)
merci.
@LINK
https://developer.apple.com/videos/wwdc/2014/
meric samir