Voici la présentation d'un exemple de classe. Quelqu'un peut-il m'indiquer les meilleures pratiques lors de la création d'une sous-classe de NSObject?
class MyClass: NSObject {
var someProperty: NSString! = nil
override init() {
self.someProperty = "John"
super.init()
}
init(fromString string: NSString) {
self.someProperty = string
super.init()
}
}
Est-ce correct, est-ce que je suis la meilleure pratique ici?
Je me demande si je configure correctement les initialiseurs (celui qui définit la chaîne par défaut et celui que je peux transmettre dans une chaîne)?
Dois-je appeler super.init()
à la fin de chacun des initialiseurs?
Mon initialisateur plus spécifique (celui qui prend une chaîne) doit-il simplement appeler self.init()
à la fin plutôt que super.init()
?
Quelle est la bonne façon de configurer les initialiseurs dans Swift lors du sous-classement NSObject
? - et comment devrais-je appeler le super init?
Cette question (bien que dans Objective C) suggère que vous ayez un init, que vous appelez toujours et définissez simplement les propriétés dans des adresses plus spécifiques: Initialiseur Objective-C Multiple
Je ne suis pas un ninja Swift mais j'écrirais MyClass
comme:
class MyClass: NSObject {
var someProperty: NSString // no need (!). It will be initialised from controller
init(fromString string: NSString) {
self.someProperty = string
super.init()
}
convenience override init() {
self.init(fromString:"John") // calls above mentioned controller with default name
}
}
Voir la section Initialisation de la documentation
Si someProperty peut être nul, je pense que vous souhaitez définir la propriété comme suit:
var someProperty: NSString?
Cela élimine également le besoin d'un initialiseur personnalisé (au moins pour cette propriété), car la propriété ne nécessite pas de valeur au moment de l'initialisation.
En complément des réponses, une bonne idée est d'appeler super.init () before other. Je pense que c'est une exigence plus forte dans Swift car les allocations sont implicites.