MUKER_DEV with iOS

JSONDecoder๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐ŸŽ iOS ๊ฐœ๋ฐœ/SwiftUI

JSONDecoder๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๊ธฐ

MUKER 2022. 4. 1. 02:50
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{}