我创建了一个用于存储弱对象引用的包装类,然后。我想删除里面没有有效引用的对象。
class Weak<T: AnyObject> {
weak var value : T?
init (value: T) {
self.value = value
}
}
protocol CSLocationServicesDelegate : class{
}
class conformance : CSLocationServicesDelegate{
}
class Dispatcher{
var dispatchArray = Array<Weak<CSLocationServicesDelegate>>()
func add( delegate : CSLocationServicesDelegate!){
dispatchArray.append(Weak(value: delegate));
}
func remove(obj : CSLocationServicesDelegate!){
dispatchArray.filter { (weakRef : Weak<CSLocationServicesDelegate>) -> Bool in
return weakRef.value != nil; //change this line to "return true" and it works!!!
}
}
}
然而,Xcode编译失败并报告错误,这显示绝对没有特定错误。我怀疑我是以一种错误的方式使用这种语言,Xcode无法弄清楚我想做什么。如果我将(在评论中)的行更改为注释所说的内容,则可以正常工作。
任何人都可以帮助我实现我想要的目标吗?
答案 0 :(得分:1)
我没有看到您的代码有任何问题,但编译器在编译时崩溃了。那应该是reported to Apple。
对此的一种解决方法似乎是简单地将Weak
声明为struct
而不是class
。编译得很好:
struct Weak<T: AnyObject> {
weak var value : T?
init (value: T) {
self.value = value
}
}
protocol CSLocationServicesDelegate : class{
}
class conformance : CSLocationServicesDelegate{
}
class Dispatcher{
var dispatchArray = Array<Weak<CSLocationServicesDelegate>>()
func add( delegate : CSLocationServicesDelegate!){
dispatchArray.append(Weak(value: delegate));
}
func remove(obj : CSLocationServicesDelegate!){
dispatchArray.filter { (weakRef : Weak<CSLocationServicesDelegate>) -> Bool in
return weakRef.value != nil
}
}
}