Выберите свое собственное приключение: храните строку игрока в массиве

Извините за уродливое форматирование. Просто поставьте символ вопроса после объявления, и все будет в порядке. Вопрос сообщает компилятору, что это значение является необязательным.

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.

0
задан Michael Schroeder 25 February 2015 в 09:30
поделиться