Ответ
Нет. Ключевые слова weak и unowned применимы только к ссылочным типам (классам), так как они требуют участия механизма подсчёта ссылок (ARC). Структуры и перечисления — это типы значений, для них концепция сильных/слабых ссылок не имеет смысла.
Пример ошибки:
struct MyStruct {}
weak var weakStructRef: MyStruct? // Ошибка компиляции:
// 'weak' cannot be applied to non-class type 'MyStruct'
Почему? Типы значений копируются при присваивании или передаче в функцию. У них нет единого экземпляра в памяти, на который можно было бы держать слабую ссылку.
Обходной путь: Если необходимо weak-поведение для данных, оберните структуру в класс:
class Box<T> {
var value: T
init(_ value: T) { self.value = value }
}
weak var weakBox: Box<MyStruct>? // Теперь это допустимо