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?,Error?) -> VoID)?’
我正在使用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 // ...}
对于错误处理,我可以告诉传递的错误通常是CKError
,这是一个新的(?)结构,它封装了旧NSError上userInfo字典的所有(?).
changesOperation.fetchDatabaseChangesCompletionBlock = { newToken,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错误全部内容,希望文章能够帮你解决ios – Swift 3.0 CloudKit fetchDatabaseChangesCompletionBlock错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)