2017-11-15 7 views
0

나는 "구조체"의 계산 된 속성에 json으로 감사를 얻으려고하고 오류를 제공 캡처 할 수 없습니다 : 폐쇄 암시 적 돌연변이 자기 매개 변수를 캡처 할 수 없습니다를구조체 데이터 할당 오류 : 폐쇄 암시 적 돌연변이 자기 매개 변수

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

'dataAPI'는 선택적으로 만들어야합니다. – rmaddy

+0

또한 struct 대신 클래스를 사용해야합니다. – dan

답변

0

이 오류가 발생한 이유를 설명하기 만하면됩니다. getData 구조가 있습니다. 알 수 있듯이 struct은 전달 된 값 유형이고 class과 같은 참조 된 유형은 아닙니다.

구조의 함수를 통해 데이터 모델을 변경하면 기본적으로 구조 자체가 변경된다는 것을 의미합니다. 여기에 init에서 struct에 대한 데이터 모델의 일부인 dataAPI을 변경하고 있습니다. 그것은 의 의미이며 변이 자체 매개 변수입니다. 컴파일러는 dataAPI 매개 변수를 변경하여 구조를 변경한다는 것을 알고 있습니다.

struct으로 유지하려면 dataAPI 변수를 초기화하는 mutating func을 만들 것을 권장합니다.