无法将弱分配给自定义数组

时间:2020-09-28 22:43:08

标签: ios swift weak-references

尝试使自定义数组对象变弱时,出现此错误'weak' may only be applied to class and class-bound protocol types, not '[ExerciseSet]'。为什么我不能给弱类型分配这种类型?

class Session {
    weak var sets: [ExerciseSet]?    
    
}

1 个答案:

答案 0 :(得分:2)

您不能这样做,因为Swift数组是结构而不是类。如果要在Swift中对数组进行弱引用,则需要使用包装器对象,如下所示:

class Wrapper<T> {
   let value: T
}

然后将您的课程更改为以下内容:

class Session {
   weak var sets: Wrapper<[ExerciseSet]?>
}

话虽这么说,在这里使用弱引用可能没有意义。您的会话可能是单例,也可能是一个对象,该对象一直保留在整个应用程序生命周期的内存中。

除非您实际上需要知道是否设置了该属性,否则还可以使用[ExerciseSet]而不是使其成为可选属性,然后在没有任何值时使用空数组。