Jon*_*qua 4 xcode ios cloudkit swift3
我正在关注有关CloudKit的WWDC会议.在这里,有这个代码剪断:
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
}
Run Code Online (Sandbox Code Playgroud)
即使代码完全是从幻灯片中复制的,XCode也会出现这个错误:
无法分配类型'(CKServerChangeToken?,Bool,NSError?) - > Void'的类型'((CKServerChangeToken?,Bool,错误?) - > Void)?'
我正在使用XCode 8.0 Beta 4,目标是iOS 10,以防这应该是编译器错误.
在Beta 4 [引证需要]中,实施了快速进化提议SE-0112,影响了错误处理.
这里重要的一点是,Objective-C NSError类型在Swift中导入为Error(以前ErrorProtocol)类型而不是NSError.
只需更新您的类型注释:
changesOperation.fetchDatabaseChangesCompletionBlock = {
(newToken: CKServerChangeToken?, more: Bool, error: Error?) -> Void in
// ...
}
Run Code Online (Sandbox Code Playgroud)
作为旁注,您实际上可以完全省略参数类型:
changesOperation.fetchDatabaseChangesCompletionBlock = { newToken, more, error in
// ...
}
Run Code Online (Sandbox Code Playgroud)
对于错误处理,我可以告诉传递的错误通常是a CKError,这是一个新的(?)结构,它封装userInfo旧的字典的所有(?)NSError.
changesOperation.fetchDatabaseChangesCompletionBlock = { newToken, more, error in
guard error == nil else {
if let ckerror = error as? CKError {
// ... Handle the CKError
}
return
}
// ... Do something useful
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |