Swift 2.0 中的 countForFetchRequest

countForFetchRequest in Swift 2.0

我正在尝试在 Swift 2.0 中的托管对象上下文中使用 countForFetchRequest 方法。

我注意到 executeFetchRequest 的错误处理已更改为新的 do-try-catch 语法:

func executeFetchRequest(_ request: NSFetchRequest) throws -> [AnyObject]

但是 countForFetchRequest 方法仍然使用遗留错误指针:

func countForFetchRequest(_ request: NSFetchRequest,
                    error error: NSErrorPointer) -> Int

...我在弄清楚如何在 Swift 2.0 中使用它时遇到了一些麻烦。

如果我做与 pre-Swift 2.0 相同的事情:

let error: NSError? = nil
let count = managedObjectContext.countForFetchRequest(fetchRequest, error: &error)

我收到错误说要删除 &,但是如果我删除它,我会收到另一个错误说 NSError 无法转换为 NSErrorPointer

如能提供有关如何使其正常工作的任何帮助,我们将不胜感激。

你需要这样做:

let error = NSErrorPointer()
let fetchResults = coreDataStack.context.countForFetchRequest(fetchRequest, error: error)
print("Count \(fetchResults)")

这是 Swift 2.0

的代码

您的代码几乎是正确的,但是 error 需要是一个 变量 ,才能作为 inout-argument 与 &:

var error: NSError? = nil
let count = managedObjectContext.countForFetchRequest(fetchRequest, error: &error)

更新: 截至 Swift 3, countForFetchRequest 抛出错误:

do {
    let count = try managedObjectContext.context.count(for:fetchRequest)
    return count
} catch let error as NSError {
    print("Error: \(error.localizedDescription)")
    return 0
}