super constructeur d'initialisation dans Swift
J'ai l'habitude de travailler avec Objective-c, en utilisant le code suivant dans ma classe NSObject constructeur :
- (id)init {
self = [super init] ;
return self;
}
Comment dois-je utiliser Swift?
J'ai essayé de faire ceci:
override init() {
self = super.init()
return self;
}
Je reçois deux erreurs:
cannot assign value self is immutable
nil is the only return value permitted in this initializer
- vous venez de faire
super.init()
. - Avez-vous lu le chapitre en gratuit Swift du livre de Langue? Je pensais que c'était tout expliqué là.
- Mais vous savez que le
init
comme écrit ci-dessus en Objective-C est complètement inutile, non? - yep je le sais.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas attribuer à
self
en Swift. Utilisez simplementVous pouvez aussi ne rien retourner. Les constructeurs sont de type void (en C lingo).
La Swift séquence d'initialisation a un peu de différence Objective-C,
la sous-classe ci-dessous.
La séquence d'initialisation est:
Je pense que votre code:
Nous devons nous rappeler initialiser tous de le var ou le laisser dans la classe.
super.init…()
et puis la sous-classe " stockées les propriétés.Dans Swift, vous n'avez pas d'attribuer ou de retour
self
. En outre, vous devez appelersuper.init()
après d'initialisation personnalisée. I. e., si votre code Objective-C cherché quelque chose comme:alors l'équivalent en Swift serait
La raison pour cela est indiqué dans le La documentation d'Apple:
super.init()
devrait être appelé le plus tôt possible, en particulier dans Swift. La règle est que le super-état (l'état fournis par des super-classes) doit être initialisé en premier. Évidemment, ce n'est pas toujours possible ou souhaité, mais il devrait certainement être privilégiées.super.init()
être le dernier?super.init()
doit être après, pour les propriétés héritées, il faut le faire avant.Apple document, le Langage de Programmation Swift, sur l'initialisation. Un exemple dans le document.