结构数据赋值错误:闭包不能隐式捕获变异的self参数

时间:2017-11-15 16:37:48

标签: json swift struct computed-properties

由于“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()
    }
}

1 个答案:

答案 0 :(得分:2)

只是解释为什么会出现此错误。 您有一个名为getData的结构。您可能知道struct是传递的值类型而不是class引用的类型。

这意味着如果通过结构中的函数更改数据模型,基本上就是在改变结构本身。在关键字的init中,您正在更改dataAPI,这是struct数据模型的一部分。这就是变异自我参数的含义。编译器通过改变dataAPI参数来了解您正在更改结构。

如果您想保留为struct,我建议您创建一个mutating func来初始化dataAPI变量。