首页 > 解决方案 > 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 语句,因为这将限制该方法在未来的可重用性。

标签: swiftapicore-dataescapingclosures

解决方案


推荐阅读