我有一个获取请求,它返回了一些数据,我想过滤这些数据,如下所示:
// Set up fetch request
let finalVariants : [DBVariant]
do {
let variants = try context.fetch(request)
finalVariants = variants.filter() { $0.variant == true }
} catch let error as NSError {
// Handle error
finalVariants = []
}
编写这段代码时,Xcode 在标题中给了我错误:
Cannot invoke 'filter' with an argument list of type '((Any) throws -> Bool)'
过滤器块中的代码不会抛出,将过滤器块移动到带有签名 (Any)->Bool 的单独变量中没有帮助。
答案是我没有解开包装并将类型分配给获取请求的可选结果,因此工作代码如下所示:
// Set up fetch request
let finalVariants : [DBVariant]
do {
let variantsResult = try context.fetch(request)
if let variants = variantsResult as? [DBVariant] {
finalVariants = variants.filter() { $0.variant == true }
} else {
finalVariants = []
}
} catch let error as NSError {
// Handle error
finalVariants = []
}