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

推荐答案

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

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语言不允许这样定义的扩展.

Swift相关问答推荐

如何在SwiftUI中创建具有圆角顶部和锯齿状底部边缘的自定义Shape,类似于撕破的纸?

减go 用SWIFT struct 填充的NSCountedSet

查找数组中 ** 元素 ** 的属性的最小值和最大值

如何才能在同一线程上调用类中的每个方法,而不对每个调用使用同步块?

在NavigationStack上设置拐角半径:SwiftUI中的无响应内容视图区

使用序列初始化字符串的时间复杂度是多少?

SwiftUI,如何更改具有多个按钮和一个布尔条件的一个按钮标签

为什么变量不存储在 Swift 的过程数据区中

UIImage和UIimage.pngData返回两个不同的图像

如何在 SWIFTUI 中旋转修剪?

Swift 有没有办法在不使用 switch 语句的情况下获取关联值?

如何获得不同的插入和移除过渡动画?

`@available` 属性在 macOS 版本上被错误地限制

`IndexSet` 永远不会是空的?

获取设备图像比例(例如@1x、@2x 和@3x)

MKAnnotation Swift

UICollectionView 自定义单元格在 Swift 中填充宽度

如何轻松删除领域中的所有对象

为 UIImagePicker 设置委托返回错误

swift中的匿名类