一尘不染

如何在Swift中声明弱引用数组?

swift

我想在Swift中存储一系列弱引用。数组本身不应该是一个弱引用-它的元素应该是。我认为可可NSPointerArray对此提供了非类型安全的版本。


阅读 439

收藏
2020-07-07

共1个答案

一尘不染

创建通用包装,如下所示:

class Weak<T: AnyObject> {
  weak var value : T?
  init (value: T) {
    self.value = value
  }
}

将此类的实例添加到您的数组。

class Stuff {}
var weakly : [Weak<Stuff>] = [Weak(value: Stuff()), Weak(value: Stuff())]

定义时Weak,可以使用structclass

另外,为了帮助获取数组内容,您可以按照以下方式进行操作:

extension Array where Element:Weak<AnyObject> {
  mutating func reap () {
    self = self.filter { nil != $0.value }
  }
}

AnyObject上面的用法应替换为T-但我不认为当前的Swift语言允许这样定义扩展。

2020-07-07