DevPrep

Все темы › Язык Swift

Можно ли сделать weak var для структуры? Почему?

Middle PRO

Суть

Нет — слабой ссылки на структуру не бывает. weak и unowned работают поверх ARC: они указывают на объект в куче, у которого есть счётчик ссылок, и weak обнуляется, когда объект уничтожен. Структура — value-тип: она копируется целиком, не имеет счётчика и разделяемого экземпляра, на который можно «слабо» ссылаться. Нет объекта — нечему обнуляться.

final class Session {}
protocol Delegate: AnyObject {}      // class-bound: можно weak

struct ViewState {
    weak var session: Session?       // ok: слабая ссылка на класс внутри struct
    weak var delegate: (any Delegate)?
}
// weak var state: ViewState?        // error: 'weak' may only be applied to
//                                   // class and class-bound protocol types

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store