iOS Cloudkit FetchDatabaseChangesOperation() 有一個閉包定義為:
fetchDatabaseChangesResultBlock: ((_ operationResult:
Result<(serverChangeToken: CKServerChangeToken, moreComing: Bool), Error>) -> Void)?
我的問題是,實際的閉包塊是什么樣的?
例如,我試過這個,它編譯:
let operation = CKFetchDatabaseChangesOperation(previousServerChangeToken: changeToken)
operation.fetchDatabaseChangesResultBlock = {
result in
}
需要獲取serverChangeToken、moreComing 值和Error。但我無法弄清楚“結果”是什么,或者即使我有正確的簽名。
任何幫助,將不勝感激!我想不通這個。
跟進:根據答案,這是解決問題的具體代碼。
operation.fetchDatabaseChangesResultBlock = {
result in
switch result {
case .success(let tuple):
let token = tuple.serverChangeToken
let moreComing = tuple.moreComing
// Do something
}
case .failure(let error):
// Handle error
break;
}
}
uj5u.com熱心網友回復:
如您所見,閉包的型別是(Result<(serverChangeToken: CKServerChangeToken, moreComing: Bool), Error>) -> Void)?. 分解它,我們看到:
- 整個事情是可選的,這意味著它可以是
nil. - 當它不是
nil時,它是 type 的閉包(Result<(serverChangeToken: CKServerChangeToken, moreComing: Bool), Error>) -> Void。 - 這種閉包型別只有一個引數,并且不回傳任何內容。
- 該引數具有型別
Result<(serverChangeToken: CKServerChangeToken, moreComing: Bool), Error>。這是ResultSwift 標準庫中的型別,其:Success型別是(serverChangeToken: CKServerChangeToken, moreComing: Bool)(只是兩個值的元組)Failuretype is justError(即它不再受Failure: Error約束而不是Result已經存在的約束)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429156.html
