由于“struct”的计算属性,我试图得到一个json并且它给出了错误:Closure不能隐式捕获变异的self参数
struct getData: Encodable, Decodable {
var dataAPI: ItemsStruct
init(url: String!) {
let task = URLSession.shared.dataTask(with: URL(string: url)!) { (data, response, error) in
guard let data = data else { return }
do {
// Convert the data to JSON
let jsonSerialized = try? JSONDecoder().decode(ItemsStruct.self, from: data)
self.dataAPI = jsonSerialized! <--error: closure cannot implicitly capture a mutating self parameter
}
}
task.resume()
}
}
答案 0 :(得分:2)
只是解释为什么会出现此错误。
您有一个名为getData
的结构。您可能知道struct
是传递的值类型而不是class
引用的类型。
这意味着如果通过结构中的函数更改数据模型,基本上就是在改变结构本身。在关键字的init
中,您正在更改dataAPI
,这是struct
数据模型的一部分。这就是变异自我参数的含义。编译器通过改变dataAPI
参数来了解您正在更改结构。
如果您想保留为struct
,我建议您创建一个mutating func
来初始化dataAPI
变量。