ios – Swift 3.0 CloudKit fetchDatabaseChangesCompletionBloc
发布时间:2020-12-14 17:44:08 所属栏目:百科 来源:网络整理
导读:我跟随 WWDC Session about CloudKit.在这里,有这个代码剪断: let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: privateDatabaseChangeToken)//(...)changesOperation.fetchDatabaseChangesCompletionBlock = { (newTok
我跟随
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也会出现这个错误:
我正在使用XCode 8.0 Beta 4,目标是iOS 10,以防这应该是编译器错误. 解决方法
在Beta 4 [需要引证]中,实施了快速演进提议
SE-0112,影响了错误处理.
这里重要的一点是,Objective-C NSError类型在Swift中作为Error(以前的ErrorProtocol)类型而不是NSError导入. 只需更新您的类型注释: changesOperation.fetchDatabaseChangesCompletionBlock = { (newToken: CKServerChangeToken?,error: Error?) -> Void in // ... } 作为旁注,您实际上可以完全省略参数类型: changesOperation.fetchDatabaseChangesCompletionBlock = { newToken,more,error in // ... } 对于错误处理,我可以告诉传递的错误通常是 changesOperation.fetchDatabaseChangesCompletionBlock = { newToken,error in guard error == nil else { if let ckerror = error as? CKError { // ... Handle the CKError } return } // ... Do something useful } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |