Обнаружьте дефекты в реализации Swift‑структуры

Метод структуры, изменяющий её свойства, нужно объявить mutating. Без этого self внутри обычного метода неизменяем.

Короткий ответ

Что ответить на собеседовании

Метод структуры, изменяющий её свойства, нужно объявить 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 структуры и изменением свойств объекта класса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее