Init et DidSet sont dans une même classe
iLandes
Membre
Bonjour,
Une petite question concernant l'initialisait d'une classe. Je voudrais que ma note soit comprise entre 0 et 127. J'utilise le code suivant :
var chanel: Int {
didSet {
// From 1 to 16
chanel = min(max(chanel,1),16)
}
}
var name: String = ""
// Init methods
init (noteNumber: Int, chanel: Int, name: String)
{
println("init \(noteNumber) : ")
self.noteNumber = noteNumber
self.name = name
self.chanel = chanel
}
Lors de l'appel à ma méthode init désigné, je ne passe pas par le DidSet. Il y a-t-il un moyen de forcer cela ou mon contrôle n'est-il pas fait au bon endroit ?
D'avance merci de votre aide
seb
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je n'ai pas très bien compris ton problème. Dans le doute, tu ne peux pas utiliser une variable privée comme ça ? :
ça permet d'accéder en interne à la variable _chanel dans l'init sans passer par les setters/getters.
Peut-être je n'ai pas été claire.
Une note est composé d'un entier (entre 0 et 127), d'un canal (1 à 16) et d'un nom (string). Je souhaite vérifier que ma note soit toujours conforme à ces contraintes.
Mon code fonctionne sauf que mes contraintes ne sont pas vérifiées au moment de la création. C'est ce qui m'embête...
Voici le code complet que j'ai écrit.
La console donne
NOT CORRECT : 1000 | Chanel = 45 | test
CORRECT : 127 | Chanel = 1 | unknow
Avec ça :
Le programme affiche :
ne passais pas au compilateur (Xcode 6.3). Normal, tu ne l'initialisais pas !
Je l'ai remplacé par une chaà®ne vide, un truc classique en Swift pour éviter de déclarer des variables optionnelles.
Et c'est normal que le difSet ne soit pas appelé, il n'est jamais appelé dans le init pour éviter les effets de bord.
J'aime bien la solution de Draken avec les private var à l'ancienne mais efficace.
Mais j'aimerai bien aller plus loin avec la méthode d'Ali. L'init en swift ne retourne rien, donc comment le rendre failable quand l'initialisation a échoué ?
J'ai fait ça mais je suis pas fan