如何解决此错误转义闭包捕获了变异的“ self”参数

问题描述

在这里理解了解释,但是如何用另一种方法解决呢? Swift 5 : What's 'Escaping closure captures mutating 'self' parameter' and how to fix it

包裹提供商

class PackageProvider: PackageProviderProtocol {
    func getAllPackage(completion: @escaping ([Package]) -> ()) {
        
        guard let url = Bundle.main.url(forResource: "packageList",withExtension: "json") else { return }

        AF.request(url,method: .get,parameters: nil,encoding: URLEncoding.default,headers: nil,interceptor: nil,requestModifier: nil).response { (responseData) in

            guard let data = responseData.data else { return }

            if let package = self.jsonDictionary(from: data)?["packages"]{
                do {

                    let data = try JSONSerialization.data(withJSONObject: package,options: .fragmentsAllowed)
                    let packages = try JSONDecoder().decode([Package].self,from: data)
                    completion(packages)


                } catch let error {
                    print(error)
                }
            }
        }
    }
}

包装提供商协议

protocol PackageProviderProtocol {

    func getAllPackage(completion: @escaping ([Package]) ->())
}

打包视图模型

struct Packageviewmodel {
    
    private var packageProvider: PackageProviderProtocol!
    public var allPackages = [Package]()
    public var favPackages = [Package]()
    public var selectedPackage = Package()
    public var favButtonIsActive = true
    
    var packageviewmodel: Any?
    
    init() {
        self.packageProvider.getAllPackage { (packageResult) in
            self.allPackages = packageResult // Error: Escaping closure captures mutating 'self' parameter
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...