Swift 无法调用';过滤器';具有类型为';(()->;&x27 ;;

Swift 无法调用';过滤器';具有类型为';(()->;&x27 ;;,swift,Swift,听起来很可笑,但我无法修复这段代码: self.runningScripts.filter({ $0 != scriptRunner }) 无论我如何编写闭包,我总是会遇到以下错误: 无法使用类型为“((?)->”的参数列表调用“筛选器” 运行脚本的定义如下: var runningScripts = [ScriptRunner]() @NSManaged private var storage: [String] private var objects: Set<Strin

听起来很可笑,但我无法修复这段代码:

self.runningScripts.filter({ $0 != scriptRunner })
无论我如何编写闭包,我总是会遇到以下错误:

无法使用类型为“
((?)->
”的参数列表调用“筛选器”

运行脚本
的定义如下:

var runningScripts = [ScriptRunner]()
@NSManaged private var storage: [String]
    private var  objects: Set<String>?
    func remove(element:String) {
        initSetIfNeeded()
        if(objects!.contains(element)) {
            objects!.remove(element)
            storage = storage.filter({($0 as NSObject) !== (element as NSObject)}) // Explicit cast here!!
        }
    }
ScriptRunner
是一个Swift类(不从NSObject继承)


我在许多其他地方使用几乎相同的软件,没有问题。有什么建议吗?

如果您没有使
ScriptRunner
符合
equalable
,则可能会出现该错误:

class ScriptRunner : Equatable {
    // the rest of your implementation here
}

func ==(lhs: ScriptRunner, rhs: ScriptRunner) -> Bool {
    return ... // change this to whatever test that satisfies that lhs and rhs are equal
}

我需要这样一个明确的演员阵容:

var runningScripts = [ScriptRunner]()
@NSManaged private var storage: [String]
    private var  objects: Set<String>?
    func remove(element:String) {
        initSetIfNeeded()
        if(objects!.contains(element)) {
            objects!.remove(element)
            storage = storage.filter({($0 as NSObject) !== (element as NSObject)}) // Explicit cast here!!
        }
    }
@NSManaged私有变量存储:[String]
私有变量对象:设置?
func remove(元素:字符串){
initSetIfNeeded()
如果(对象!.contains(元素)){
对象!.remove(元素)
storage=storage.filter({($0作为NSObject)!==(元素作为NSObject)})//这里显式强制转换!!
}
}

…或者您可以将其作为NSObject的子类(符合
equalable
)。就在那一刻我发现了。无论如何,谢谢你!(实际上我想使用
!==
…)我会小心使用
NSObject
技术。它使
==
的行为更像
==
,除非您用更符合逻辑的东西覆盖
isEqual
(或者自己实现
=
,在这种情况下,仅遵从
equalable
更简单)。感谢您的警告。我刚刚意识到,在写了评论之后,这就是为什么我添加了“实际上我想使用!===…”啊。没有看到您评论的更新。如果你真的想要
==
,则不需要
equalable
NSObject
子类。英雄联盟