ios - Swift:无法使用 'filter' 类型的参数列表调用 '((Any) throws -> Bool)'

标签 ios swift filter swift3

我有一个获取请求,返回一些数据,我想过滤这些数据,如下所示:

// 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)'

过滤器 block 中的代码不会抛出异常,将过滤器 block 移动到带有签名 (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 = []
}

关于ios - Swift:无法使用 'filter' 类型的参数列表调用 '((Any) throws -> Bool)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836659/

相关文章:

iphone - 使用 Cocoa Touch 制作弹出窗口

swift - 如何获取自上一帧以来我的 Sprite 的 x 移动量?

swift - UIImageView 在没有 Alpha 的情况下混合颜色

mysql - 使用串联名称来过滤结果,但不在表中显示名称

android - 对 performFiltering 的约束在第一个字符上返回 null

ios - 使用 key 从 nsdiscionary 中删除重复的数据集

objective-c - View 在 iOS 4.3 模拟器中显示不正确

swift - NSTimer 在此函数中无效时不会停止

javascript - Ramda - 过滤对象数组 - 柯里化(Currying) fn 参数顺序

ios - Collection View 更新问题 - Swift