【问题标题】:Swift: Cannot invoke 'filter' with an argument list of type '((Any) throws -> Bool)'Swift:无法使用类型为“((Any) throws -> Bool)”的参数列表调用“过滤器”
【发布时间】:2017-01-25 02:46:44
【问题描述】:

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

// 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)的单独var中->Bool没有帮助。

【问题讨论】:

    标签: ios swift filter swift3


    【解决方案1】:

    答案原来是我没有打开包装并将类型分配给 fetch 请求的可选结果,所以工作代码如下所示:

    // 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 = []
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多