ios 无法将"(String)async ->()“类型的函数传递给需要同步函数类型的参数

euoag5mw  于 2023-02-17  发布在  iOS
关注(0)|答案(1)|浏览(119)

我已经创建了简单的异步函数来从cloudkit中获取给定类型的所有记录:

func fetchAllOf(
    types: [String],
    handler: ProgressHandler?,
    completion: ErrorHandler?
) async {
    var newTypes = types
    var allRecords = [CKRecord]()
    newTypes.forEach { type in
        await fetchAllOf(type: type, handler: handler) { records, error in
            guard let error = error else {
                allRecords += records
                return
            }
            completion?(error)
        }
    }
}

其中:

private func fetchAllOf(
    type: String,
    predicate: NSPredicate = NSPredicate(value: true),
    handler: ProgressHandler?,
    completion: RecordsErrorHandler?
) async {
}

为什么我在那里有一个错误?

nwlls2ji

nwlls2ji1#

不要将(自定义)完成处理程序与async/await混用。
发生该错误的原因是常规forEach闭包不是async并且没有返回值。
使fetchAllOf(type:handler:)(单数)也异步(和throws),并编写如下内容

func fetchAllOf(
    types: [String],
    handler: ProgressHandler?) async throws -> [CKRecord] {
        var allRecords = [CKRecord]()
        for aType in types {
            let records = try await fetchAllOf(type: aType, handler: handler)
            allRecords += records
        }
        return allRecords
}

相关问题