我想在Swift中存储一个弱引用数组。数组本身不应该是弱引用-它的元素应该是弱引用。我认为Cocoa NSPointerArray提供了一个非类型安全的版本。
发布于 2014-06-10 04:07:46
创建通用包装器,如下所示:
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时,您可以使用struct或class。
此外,为了帮助获取数组内容,您可以执行类似以下内容的操作:
extension Array where Element:Weak<AnyObject> {
mutating func reap () {
self = self.filter { nil != $0.value }
}
}上面对AnyObject的使用应该用T代替--但我不认为当前的Swift语言允许这样定义的扩展。
发布于 2020-03-16 22:38:07
函数式编程方法
不需要额外的类。
只需定义一个闭包数组() -> Foo?并使用[weak foo]将foo实例捕获为弱实例。
let foo = Foo()
var foos = [() -> Foo?]()
foos.append({ [weak foo] in return foo })
foos.forEach { $0()?.doSomething() }发布于 2014-06-10 04:09:26
您可以通过创建包装对象来保存弱指针来实现此目的。
struct WeakThing<T: AnyObject> {
weak var value: T?
init (value: T) {
self.value = value
}
}然后在数组中使用这些
var weakThings = WeakThing<Foo>[]()https://stackoverflow.com/questions/24127587
复制相似问题