안녕하세요 :)
iOS 개발자 리치(rich_iosdev)입니다.
공유해드릴 내용은 Codable 입니다.
Codable
A type that can convert itself into and out of an external representation.
애플 공식 문서상에서 정의된 Codable은 외부 표현으로 변환될 수 있는? 타입이다? 라고 되어 있는 것 같은데요.
정확히 이해하기 어려워서 부스트코스 강의 정의를 다시 한번 봤습니다.
"인코딩과 디코딩에 사용되는 프로토콜" 이다.
이게 좀 더 이해하기 쉬운 것 같네요.
인코딩과 디코딩에 대한 이해는 하고 계신다는 전제로 설명드리겠습니다
Codable은 Swift4 부터 사용할 수 있는 프로토콜이구요.
간단히 말해서 JSON 데이터를 서버에서 받아오면 굉장히 간편하게 디코딩 할 수 있도록 만들어 주는 놈입니다.
typealias Codable = Decodable & Encodable
Codable의 Decodable이 이런 작업을 도와주는데요.
좀 더 직관적인 이해를 위해서 샘플 코드를 구현해 보았습니다.
struct City: Decodable {
let name: String
let id: Int
let weather: [Weather]
let main: Main
}
struct Weather: Decodable {
let main: String
let description: String
let icon: String
}
struct Main: Decodable {
let temp: Float
let pressure: Float
let humidity: Float
let tempMin: Float
let tempMax: Float
var seaLevel: Float?
var grndLevel: Float?
private enum CodingKeys: String, CodingKey {
case temp, pressure, humidity
case tempMin = "temp_min"
case tempMax = "temp_max"
case seaLevel = "sea_level"
case grndLevel = "grnd_level"
}
}
우선 위 코드는 서버 API를 호출 했을 때 받아오는 JSON 데이터의 Format(양식)에 따라서 다릅니다. 화면에 보여주고자 하는 데이터들의 프로퍼티와 타입을 정의해주는 것입니다.
여기서 각 구조체 마다 'Decodable' 이라는 프로토콜이 채택되어있는데요. Codable을 채택하셔도 상관 없습니다.
import Foundation
class OpenWeatherAPI {
static let shared = OpenWeatherAPI()
init() {}
func fetchWeatherDataByCoordinate(latitude: Double, longitude: Double, completion: @escaping (City?, Error?) -> ()) {
let urlString = "http://api.openweathermap.org/data/2.5/weather?lat=\(latitude)&lon=\(longitude)&units=metric&APPID=\(개발자개인키값)"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, res, err) in
if let err = err {
print(err.localizedDescription)
print("Failed to fetch weather data...")
return
}
do {
let jsonResult = try JSONDecoder().decode(City.self, from: data!)
completion(jsonResult, nil)
} catch let err {
completion(nil, err)
}
}.resume()
}
}
위 코드에서는 Decodable 프로토콜을 채택한 City라는 구조체를 활용해서 JSONDecoder()로 디코딩 작업 수행을 구현한 것입니다.
이렇게 jsonResult 라는 변수에 담아서 원하는 화면 UI에 데이터를 보여줄 수 있습니다
물론 구현된 코드는 데이터를 가져오는 메서드까지만 나와있어서 연결된 부분을 이해하기 어려울 수 있지만
기본적인 Codable 활용법을 다뤘기 때문에 여기까지만 일단 설명드리도록 할게요
잘못된 부분이 있다면 꼭 댓글 부탁드립니다!
확인해서 수정하도록 할게요!!
끝까지 읽어주셔서 정말 감사합니다 :)
Reference
[부스트코스] iOS프로그래밍
Codable?
'Codes Travel > iOS Boost Course #2019' 카테고리의 다른 글
비동기 프로그래밍 (0) | 2019.08.22 |
---|---|
Photos 프레임워크 활용하기! (0) | 2019.08.22 |
UITableView - DataSource & Delegate (0) | 2019.08.05 |
세그 (Segue) ? (0) | 2019.08.01 |
뷰의 재사용 이란? (0) | 2019.08.01 |