2017-11-02 6 views

답변

0

User 유형의 userData 구성원이있는 새 구조체를 만듭니다.

struct Response: Codable { 
    private enum CodingKeys: String, CodingKey { 
     case userData = "user_data" 
     case status 
    } 

    let userData: User 
    let status: Bool 
} 
+0

감사합니다 : 당신은 하나의 객체로 응답을 디코딩 할 수

public class User: Decodable { var id: Int var name: String var email: String // MARK: - Codable private enum RootCodingKeys: String, CodingKey { case userData = "user_data" enum NestedCodingKeys: String, CodingKey { case id case name case email } } required public init(from decoder: Decoder) throws { let rootContainer = try decoder.container(keyedBy: RootCodingKeys.self) let userDataContainer = try rootContainer.nestedContainer(keyedBy: RootCodingKeys.NestedCodingKeys.self, forKey: .userData) self.id = try userDataContainer.decode(Int.self, forKey: .id) self.name = try userDataContainer.decode(String.self, forKey: .name) self.email = try userDataContainer.decode(String.self, forKey: .email) } } 

다음 JSON 응답을 감안할 때

. 나는 이것이 나의 예에서 충분하다고 생각한다. –

+0

안녕하세요, 마이크, 당신은 전체 답변을 제공 할 수 있습니까? 나는 조각을 짝 지어서 문제가있다 :) –

+0

안녕하세요,이 기사는 도움이 될 것입니다; https://hackernoon.com/everything-about-codable-in-swift-4-97d0e18a2999 – theMikeSwan

1

중첩 된 코딩 키를 만들면 하나의 데이터 모델을 사용하여 응답 디코딩을 수행하게됩니다.

let data = """ 
{ 
    "user_data": { 
     "id":3, 
     "name":"Damian D", 
     "email":"[email protected]" 

    }, 
    "status":true 
} 
""".data(using: .utf8, allowLossyConversion: false)! 

다음과 같은 데이터 모델 : 응답에 대한

let decoder = JSONDecoder() 
let user = try? decoder.decode(User.self, from: data)