gpt4 book ai didi

ios - Swift 3.0 CloudKit fetchDatabaseChangesCompletionBlock 错误

转载 作者:可可西里 更新时间:2023-11-01 05:19:39 24 4
gpt4 key购买 nike

我正在跟踪 WWDC Session about CloudKit .在这里,有这段代码被剪掉了:

let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: privateDatabaseChangeToken)
//(...)
changesOperation.fetchDatabaseChangesCompletionBlock = {
(newToken: CKServerChangeToken?, more: Bool, error: NSError?) -> Void in
// error handling here
self.sharedDBChangeToken = newToken // cache new token
self.fetchZoneChanges(callback) // using CKFetchRecordZoneChangesOperation
}

即使代码是从幻灯片中完全复制的,XCode 还是会溢出这个错误:

Cannot assign value of type '(CKServerChangeToken?, Bool, NSError?) -> Void' to type '((CKServerChangeToken?, Bool, Error?) -> Void)?'

我正在使用 XCode 8.0 Beta 4,目标是 iOS 10,以防这应该是编译器错误。

最佳答案

在 Beta 4[需要引用] 中,swift-evolution 提案 SE-0112已实现,影响错误处理。

这里重要的一点是 Objective-C NSError 类型在 Swift 中被导入为 Error(以前的 ErrorProtocol)类型而不是 NSError.

只需更新您的类型注释:

changesOperation.fetchDatabaseChangesCompletionBlock = {
(newToken: CKServerChangeToken?, more: Bool, error: Error?) -> Void in
// ...
}

作为旁注,您实际上可以完全省略参数类型:

changesOperation.fetchDatabaseChangesCompletionBlock = { newToken, more, error in
// ...
}

对于错误处理,据我所知传递的错误通常是 CKError ,这是一个新的(?)结构,它封装了旧的 NSError 上的所有(?)userInfo 字典。

changesOperation.fetchDatabaseChangesCompletionBlock = { newToken, more, error in
guard error == nil else {
if let ckerror = error as? CKError {
// ... Handle the CKError
}
return
}
// ... Do something useful
}

关于ios - Swift 3.0 CloudKit fetchDatabaseChangesCompletionBlock 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38815701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com