250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- mvc
- ios
- 실습
- 반응형
- 네트워크
- 구름톤 유니브
- RxSwift
- 대표
- swift
- 앱개발
- 프로토콜
- AppStore
- 학과별커뮤니티
- 이론
- 디자인 패턴
- 세종대학교
- 기초문법
- 협업
- MVVM
- SwiftUI
- CS
- collectionview
- 딕셔너리
- 토이프로젝트
- async
- uikit
- struct
- WeatherKit
- forEach
- 스트럭트
Archives
- Today
- Total
스윞한 개발자
Swift 기초 문법 - 코더블 Codable 본문
728x90
반응형
SMALL
이번 포스팅에서는 코더블에 대해서 포스팅 해보겠습니다!
Codable은 Swift에서 데이터를 쉽게 인코딩(직렬화)하고 디코딩(역직렬화)할 수 있게 해주는 프로토콜입니다. Codable은 Encodable과 Decodable 프로토콜을 함께 묶은 것입니다. 즉, Codable을 채택한 타입은 데이터를 JSON 또는 다른 형식으로 인코딩하거나 디코딩할 수 있습니다!
Codable을 채택한 타입은 JSON, Property List 및 다른 형식의 데이터를 쉽게 변환하고 다룰 수 있습니다.
Codable을 채택하는 방법:
타입을 Codable로 만들려면 해당 타입의 프로퍼티들이 Encodable 및 Decodable 프로토콜을 따라야 합니다.
1. Encodable
Encodable은 타입을 인코딩할 수 있는 기능을 제공합니다. 이 프로토콜을 준수하는 타입은 JSON이나 다른 형식으로 인코딩될 수 있습니다.
// encode = 제이슨으로 만들기
let person = Person(name: "John", age: 25)
// 인코딩 (Codable -> Data)
do {
let encoder = JSONEncoder()
let jsonData = try encoder.encode(person)
print(String(data: jsonData, encoding: .utf8)!)
} catch {
print("Encoding error: \(error.localizedDescription)")
}
// 디코딩 (Data -> Codable)
let jsonString = """
{"name":"Jane","age":30}
"""
do {
let decoder = JSONDecoder()
let decodedPerson = try decoder.decode(Person.self, from: jsonString.data(using: .utf8)!)
print(decodedPerson)
} catch {
print("Decoding error: \(error.localizedDescription)")
}
2. Decodable
Decodable은 타입을 디코딩할 수 있는 기능을 제공합니다.
// decode = 제이슨을 클래스, 스트럭트 바꾸기
3. Codable
struct Person: Codable {
var name: String
var age: Int
}
위의 코드에서 Person 구조체는 Codable을 채택하였기 때문에 인코딩 및 디코딩이 가능한 타입이 됩니다!
Codable은 Encodable, Decodable 프로토콜을 모두 채택한 것으로, 타입이 인코딩 및 디코딩 양쪽에서 모두 사용될 수 있음을 의미합니다.
struct Person: Codable {
var name: String
var age: Int
}
let person = Person(name: "Alice", age: 30)
>> // Encoding (인코딩)
let encoder = JSONEncoder()
if let encodedData = try? encoder.encode(person) {
if let jsonString = String(data: encodedData, encoding: .utf8) {
print(jsonString)
}
}
>> // Decoding (디코딩)
let json = """
{
"name": "Bob",
"age": 25
}
"""
let jsonData = Data(json.utf8)
let decoder = JSONDecoder()
if let decodedPerson = try? decoder.decode(Person.self, from: jsonData) {
print(decodedPerson.name) // "Bob"
print(decodedPerson.age) // 25
}
참고(출처) : 개발하는 정대리, 야곰(Swift5)
728x90
반응형
LIST
'Swift 이론' 카테고리의 다른 글
Swift 기초 문법 - 디자인패턴 빌더패턴 (0) | 2024.01.27 |
---|---|
Swift 기초 문법 - 멀티트레일링 클로져 (0) | 2024.01.26 |
Swift 기초 문법 - getter / setter (0) | 2024.01.25 |
Swift 기초 문법 - 의존성 주입 Dependency (0) | 2024.01.25 |
Swift 기초 문법 - class func vs static func (0) | 2024.01.24 |