如何解决如何解决此错误转义闭包捕获了变异的“ 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 举报,一经查实,本站将立刻删除。