관리 메뉴

사과하는 제라스

[Swift 문법] Codable 본문

제라스의 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
    반응형