我目前正在重寫大量代碼以使用新的 async/await 機制,但我想逐個完成,而不是將專案中的每個檔案更改為使用 async/await。
我將如何轉換使用完成處理程式的方法,如下所示:
func fetchLibrary(completion: ((Error?) -> Void)?) {
apiManager.loadLibraryContent { [weak self] result in
switch result {
case .success(let records):
let databaseError = self?.databaseManager.updateDatabase(withNewRecords: records)
completion?(databaseError)
case .failure(let error):
completion?(error)
}
}
}
然后將loadLibraryContent方法更新為apiManager如下所示:
func loadLibraryContent() async throws -> [GRDBRecord] {
并且仍然可以在第一種方法中使用完成處理程式?這將使逐步遷移到 async/await 變得更容易。
理想情況下,新代碼如下所示:
func fetchLibrary(completion: ((Error?) -> Void)?) {
do {
let records = try await apiManager.loadLibraryContent()
let databaseError = self?.databaseManager.updateDatabase(withNewRecords: records)
completion?(databaseError)
} catch {
completion?(error)
}
}
可以用 Swift 做嗎?
uj5u.com熱心網友回復:
您可以使用 Task
func fetchLibrary(completion: ((Error?) -> Void)?) {
Task {
do {
let records = try await apiManager.loadLibraryContent()
let databaseError = self?.databaseManager.updateDatabase(withNewRecords: records)
completion?(databaseError)
} catch {
completion?(error)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327988.html
