Swift过滤器函数导致编译错误

时间:2014-11-16 21:59:28

标签: macos swift

我创建了一个用于存储弱对象引用的包装类,然后。我想删除里面没有有效引用的对象。

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无法弄清楚我想做什么。如果我将(在评论中)的行更改为注释所说的内容,则可以正常工作。

任何人都可以帮助我实现我想要的目标吗?

1 个答案:

答案 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
        }
    }
}