0
웹 서비스에서 JSON 데이터를 간단하게 가져 오는 데 Swift 4 Codable 인터페이스를 사용하고 있습니다. 디코딩을 처리하기 위해 제네릭 형식 메서드를 구현하려고 했으므로 (사용자 지정 메서드가 필요하지 않음) 오류가 계속 발생합니다. 여기에 오류가 "형의 인수 목록 '(: 데이터에서 T를)' '해독'을 호출 할 수 없습니다"읽는 코드내 템플릿이 JSONDecodable과 호환되지 않는 이유는 무엇입니까?
extension StarWarsAPI {
public func decodeJson<T: Codable>(fetchUrl: URL, modelType: T, completion: @escaping (_ modelObject: Codable?, _ error:StarWarsErrorType?) -> Void){
//guard modelType is Codable else {return completion(nil,nil)}
var fetchRequest = URLRequest(url: fetchUrl, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
fetchRequest.httpMethod = "GET"
fetchRequest.allHTTPHeaderFields = [
"content-type": "application/json",
"cache-control": "no-cache",
]
let session = URLSession.shared
let fetchDataTask = session.dataTask(with: fetchRequest) { (data, response, error) in
guard error == nil else {
return completion(nil, StarWarsErrorType.urlResponseError(error: error))
}
guard let httpResponse = response as? HTTPURLResponse else {
return completion(nil, StarWarsErrorType.NilUrlResponseError())
}
guard let data = data else {
return completion(nil, StarWarsErrorType.noDataFound)
}
guard httpResponse.statusCode > 199 && httpResponse.statusCode < 300 else {
return completion(nil, StarWarsErrorType.httpErrorCode(code: httpResponse.statusCode))
}
var modelObject:Codable?
do {
let jsonDecoder = JSONDecoder()
modelObject = try jsonDecoder.decode(modelType.self, from: data)
return completion(modelObject, nil)
}catch{ // do nothing }
DispatchQueue.main.async {
completion(nil, nil)
}
}
}
fetchDataTask.resume()
}
입니다. 다음은 오류의 스크린 샷입니다.
무엇이 누락 되었습니까? 감사! decode(_:from:)
에
이것은 완벽하게 작동했습니다! 고침과 설명에 감사드립니다! 확실하지 않다 . 이 질문을 답으로 표시하는 방법. – RMH
@RMH 기꺼이 도와 드리겠습니다. 질문에 답변으로 표시하는 방법에 대한 지침은 https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work를 참조하십시오. –