swift - Swift:在转义闭包中使用 inOut 参数
问题描述
我有以下方法:
private func retrieveFromAPIAndMapToCD<T: Decodable & CoreDataMappable, R: NSManagedObject>(endpoint: Endpoint, object: T.Type, cdObjectType: R.Type, storedObjectList: inout [R]) {
API.client.call(endpoint, expecting: [T].self) { (result, objects) in
switch result {
case .failure:
print("Unable to retrieve objects")
case .success:
guard let objectResponse = objects else { return }
DispatchQueue.main.async {
for object in objectResponse {
object.mapToCoreData()
}
self.appDelegate.saveContext()
self.updateLastSavedDate(object: T.self)
self.fetchObjectsFromCD(object: cdObjectType.self, objectList: &storedObjectList)
}
}
}
}
在不粘贴太多不必要的代码的情况下,我的问题是在这个 API 调用中(它来自我们用来处理 API 响应的库帮助器方法)我需要设置 storedObjectList ,它是在当前类的范围内定义的变量。
但是,当我这样做时,我收到一条错误消息:
Escaping closure captures 'inout' parameter 'storedObjectList'
我正在尝试找到解决此问题的方法,以便我仍然可以在此处传递 storedObjectList 。我为 3 个不同的对象使用了这个方法,因此我试图使其通用以避免代码重复。这是我无法开始工作的最后一部分。我想避免基于作为 R 传入的对象类型的某种 switch 语句,因为这将限制该方法在未来的可重用性。
解决方案
推荐阅读
- javascript - 有什么方法可以将 blob url 转换为文件。?
- python - Pandas:将输出值从具有 NaN 值的列中的浮点数更改为整数
- angular - 可扩展行内具有嵌套材料表的材料表
- javascript - Discord.js Slash 命令名称无效
- pandas - 为什么即使 iterator = False,Pandas read_CSV 也会返回 TextFileReader?
- java - 在 Vaadin 框架中,如何让客户端时区用于渲染显示的第一页
- javascript - Vue.js Javascript 框架和打印而不打印对话框
- jsf - 我不知道如何将 html 页面转换为 xhtml(jsf) ,当我运行该页面时,我没有为名称定义标签:输入
- docker - Ubuntu 20.04 上的安全 Tileserver-GL
- solr - 如果我们有很多 indexed=true 和 stored=false 的字段,solr 集合大小会增加吗