Désolé pour l'horrible formatage. Mettez simplement un caractère d'interrogation après la déclaration et tout ira bien. Une question indique au compilateur que la valeur est facultative.
class Square: Shape {
var sideLength: Double? // <=== like this ..
init(sideLength:Double, name:String) {
super.init(name:name) // Error here
self.sideLength = sideLength
numberOfSides = 4
}
func area () -> Double {
return sideLength * sideLength
}
}
Edit1 :
Il existe un meilleur moyen d'éviter cette erreur. Selon le commentaire de jmaschad, il n'y a aucune raison d'utiliser optional dans votre cas, car les optionals ne sont pas confortables à utiliser et vous devez toujours vérifier si optional n'est pas nil avant d'y accéder. Donc tout ce que vous avez à faire est d'initialiser le membre après la déclaration :
class Square: Shape {
var sideLength: Double=Double()
init(sideLength:Double, name:String) {
super.init(name:name)
self.sideLength = sideLength
numberOfSides = 4
}
func area () -> Double {
return sideLength * sideLength
}
}
Edit2 :
Après avoir obtenu deux "moins" pour cette réponse, j'ai trouvé un moyen encore meilleur. Si vous voulez que le membre de la classe soit initialisé dans votre constructeur, vous devez lui assigner une valeur initiale à l'intérieur du constructeur et avant l'appel à super.init(). Comme ceci :
class Square: Shape {
var sideLength: Double
init(sideLength:Double, name:String) {
self.sideLength = sideLength // <= before super.init call..
super.init(name:name)
numberOfSides = 4
}
func area () -> Double {
return sideLength * sideLength
}
}
Bonne chance dans l'apprentissage de Swift.