Swift 3.0 CloudKit fetchDatabaseChangesCompletionBlock Error

I am following a WWDC session on CloudKit . This code was disabled in this:

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
    }

Despite the fact that the code was copied from the sliders, Xcode posted this error:

Cannot set value to type '(CKServerChangeToken ?, Bool, NSError?) → Void' for input '((CKServerChangeToken ?, Bool, Error?) → Void)?

I am using Xcode 8.0 Beta 4 and the target is iOS 10 if this is a compiler error.

+4
source share
1 answer

Beta 4 [citation needed] suggested a proposal for the rapid evolution of SE-0112 , affecting error handling.

, Objective-C NSError Swift Error ( ErrorProtocol) NSError.

:

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

:

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

, , , 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
}
+7

Source: https://habr.com/ru/post/1650463/


All Articles