์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
Tags
- ์ฝํ
- ์ฝ๋ฉํ ์คํธ
- dfs
- dp
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- ์คํ
- ๋ถํ ์ ๋ณต
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑํธ๋ํน
- WebApp
- ๋ฐฑ์ค
- ๋์ ํฉ
- BFS
- ์ด์งํ์
- ๋นํธ์ฐ์ฐ์
- ๋ธ๋ฃจํธํฌ์ค
- WebView
- ๋ฌธ์์ด
- ๋ถํ ํ์
- ์์
- Queue
- ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
- ios
- Swift
- ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ
- ๋ถํ ์ ๋ณต
- SwiftUI
Archives
- Today
- Total
MUKER_DEV with iOS
JSONDecoder๋ก ๋ฐ์ดํฐ ๋ณํํ๊ธฐ ๋ณธ๋ฌธ
BundleExtension.swift
extension Bundle {
func decode<T: Decodable>(filename: String, as type: T.Type) -> T {
guard let url = self.url(forResource: filename, withExtension: nil) else {
fatalError("๋ฒ๋ค์ \(filename)์ด ์์ต๋๋ค.")
}
guard let data = try? Data(contentsOf: url) else {
fatalError("\(url)๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.")
}
guard let decodedData = try? JSONDecoder().decode(T.self, from: data) else {
fatalError("๋ฐ์ดํฐ ๋ณตํธํ์ ์คํจํ์ต๋๋ค.")
}
return decodedData
}
}
์ด ์ฝ๋๋ ํ์ผ๋ช ์ ์ ๋ฌ๋ฐ์ผ๋ฉด ๋ฒ๋ค์ ์๋ ํ์ผ๋ก ์ ๊ทผํด JSON ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ Foundation ํ๋ ์์ํฌ์์ ์ฌ์ฉํ ์ ์๋ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
๊ทธ ๋ค์ Product ํ์ ์ ๊ตฌ์กฐ์ JSON ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ๋ค๋ฉด ํด๋น ์ฝ๋๋ฅผ Product ํ์ผ์ ์ถ๊ฐํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
extension Product: Decodable{}
'๐ iOS ๊ฐ๋ฐ > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] PreviewProvider์ previewLayout ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ (0) | 2022.04.13 |
---|---|
SwiftUI์ 4๊ฐ์ง ์์น (0) | 2022.03.16 |