제라스의 iOS 공부/Swift 문법

[Swift 문법] Codable

Xerath(제라스) 2023. 8. 18. 12:49
728x90
반응형

Codable은 무엇일까?

-> Encodable과 Decodable을 합친 프로토콜이다.

 

그럼 걔네는 뭔데??

- Decodable은 JSON을 일반 값들로 추출된 객체

- Encodable은 JSON으로 변환된 객체

 

일단 예시로 보자.

 

import UIKit

let jsonFromServer = """
{
    "name": "윤동주"
    "job": "대학생",
    "nickname": "Xerath",
}
"""

// de code = 제이슨을 클래스, 스트럭트로 바꾸기
// en code = 제이슨으로 만들기

//EnCodable & Decodable
struct User : Decodable {
    
    var nickname: String?
    var job: String
    var myUserName: String
    
    // 이렇게 CodingKey로 enum을 설정해서 각 키를 어떻게 받아올지 적어줘야 추출이 가능하다.
    enum CodingKeys: String, CodingKey {
        case nickname = "name"
        case job
        case myUserName = "nickname"
    }
    
    static func getUserFromJson(_ jsonString: String) -> Self? {
        guard let jsonData : Data = jsonString.data(using: .utf8) else {
            return nil
        }
        
        do {
            let user = try JSONDecoder().decode(User.self, from: jsonData)
            print("user: \(user)")
            return user
        } catch {
            print("에러발생: \(error.localizedDescription)")
            return nil
        }
        
    }
}

let user = User.getUserFromJson(jsonFromServer)
728x90
반응형