我目前正在重写很多代码来使用新的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)
}
}
}
然后更新apiManager
的loadLibraryContent
方法,如下所示:
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中是可能的吗?
您可以使用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)
}
}
}