Извините за уродливое форматирование. Просто поставьте символ вопроса после объявления, и все будет в порядке. Вопрос сообщает компилятору, что это значение является необязательным.
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:
Существует лучший способ пропустить эту ошибку. Согласно комментарию jmaschad, нет причин использовать опциональные в вашем случае опции, которые не удобны в использовании, и вам всегда нужно проверять, не является ли опциональным нет низа, прежде чем обращаться к нему. Итак, все, что вам нужно сделать, это инициализировать член после объявления:
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:
После того, как два минуса вошли в этот ответ, я нашел еще лучший способ. Если вы хотите, чтобы член класса был инициализирован в вашем конструкторе, вы должны назначить ему начальное значение внутри contructor и перед вызовом super.init (). Например:
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
}
}
Удачи в изучении Swift.