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
子类。英雄联盟