Метод структуры, изменяющий её свойства, нужно объявить mutating. Без этого self внутри обычного метода неизменяем.
Обнаружьте дефекты в реализации Swift‑структуры
Метод структуры, изменяющий её свойства, нужно объявить mutating. Без этого self внутри обычного метода неизменяем.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В задаче представлена Swift‑структура, в которой требуется исправить ошибку, связанную с изменением свойства внутри метода. Прочитайте код и укажите, в чём заключается проблема.
struct Fruit{
var type:String
func convertToBanana(){
self.type = "Banana"
}
}
Ответ
Метод структуры, изменяющий её свойства, нужно объявить mutating. Без этого self внутри обычного метода неизменяем.
Исправление:
struct Fruit {
var type: String
mutating func convertToBanana() {
type = "Banana"
}
}
var fruit = Fruit(type: "Apple")
fruit.convertToBanana()
Для вызова изменяющего метода сам экземпляр должен храниться в var; на let-экземпляре такой вызов запрещён. Альтернативный неизменяющий дизайн — вернуть новый Fruit из обычного метода, не меняя исходный. Это характерное различие между value semantics структуры и изменением свойств объекта класса.