일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로세스 스케줄링
- Apple Developer Academy
- 동기화
- IOS
- SwiftUI
- decode
- Swift
- 인프런
- Linked List
- struct
- 상호배제
- 오브젝트
- core data
- 앨런
- 가상 메모리
- @state
- deadlock
- Algorithm
- 알고리즘
- 비동기
- 운영체제
- forEach
- 데드락
- async
- Codable
- 100 days of SwiftUI
- scrollview
- 동시성
- COLOR
- UserDefaults
Archives
- Today
- Total
기어가더라도 제대로
[SwiftUI-기초] 계층적인 Codable 데이터 다루기 본문
- Codable encoding(), decoding() 은 이전 포스팅을 참조해주세요.
2022.11.06 - [SwiftUI - 기초] - [SwiftUI-기초] Codable (with UserDefaults)
- 이번에는 User 라는 구조체가 또다른 구조체를 프로퍼티에 들고 있는 것도 Encoding, Decoding을 해볼 것입니다.
- 이런식으로 가면은 아래로 많은 단계의 계층구조도 작업이 가능합니다.
Button("Decode JSON") {
let input = """
{
"name": "Taylor Swift",
"address": {
"street": "555, Taylor Swift Avenue",
"city": "Nashville"
}
}
"""
}
- 버튼을 누르면 이런 코드가 되는데요. JSON 타입의 이 스트링을 저희가 사용할 수 있는 인스턴스로 바꿔보는 작업입니다.
- 이것을 위한 타입을 선언해주겠습니다.
struct User: Codable {
let name: String
let address: Address
}
struct Address: Codable {
let street: String
let city: String
}
- input string 을 위의 타입의 인스턴스로 바꾸는 작업이에요 !
- 위의 코드는 다른 파일에 있어도 되고, ContentView 안에 있어도되는데 저는 빼주었습니다.
- 이렇게 하고요.. 위에 버튼의 action 나머지 부분에 다음과 같은 코드를 추가해주면..
let data = Data(input.utf8)
let decoder = JSONDecoder()
if let user = try? decoder.decode(User.self, from: data) {
print(user.address.street)
}
- JSON 형식으로된 Text 를 Data 로 바꿉니다.(Binary 타입으로 변환)
- Decoding(바이너리 데이터를 인스턴스화, 복호화) 을 위해 JSONDecoder() 를 생성합니다.
- decode 작업은 오류를 반환할 수 있으니, try? 를 앞에 달아준 모습입니다.
- 테일러 스위프트의 주소를 잘 뽑아낸걸 보니 디코딩이 성공했나보네요!
- encoding 은 위의 참조 주소에 나와있습니다.
'SwiftUI - 기초' 카테고리의 다른 글
[SwiftUI-기초] path (0) | 2022.11.14 |
---|---|
[SwiftUI-기초] Scrolling Grid (0) | 2022.11.11 |
[SwiftUI-기초] NavigationLink (0) | 2022.11.09 |
[SwiftUI-기초] ScrollView, Stack, Lazy Stack (0) | 2022.11.08 |
[SwiftUI-기초] image, resizing, Geometry Reader(feat. 중앙정렬) (1) | 2022.11.07 |
Comments