오늘의 목표: URLSession으로 받은 트랙리스트 오브젝트로 가져오기입니다.
할 일
1. Response, Track struct 만들기
2. struct의 프로퍼티 이름과 실제 데이터의 key 맞추기(Codable 디코딩하게 하기 위해서)
3. 파싱하고 트랙 정보 출력하기
1. Response, Track struct만들기
struct Response: Codable { //Codable프로토콜을 준수하겠다는 의미입니다.
let resultCount: Int
let tracks: [Track]
struct Track: Codable {
let title: String
let artistName: String
let thumbnailPath: String
Structure를 구성했다면, 이 Sturcure의 프로퍼티와 urlsession에서 쏴준 데이터의 key 이름이 맞지 않기 때문에
이것을 맞춰주는 작업을 해야 합니다.
2. struct의 프로퍼티 이름과 실제 데이터의 key맞추기(Codable 디코딩하게 하기 위해서)
각 structure에 추가해 줍니다.
struct Response: Codable { //1.에서 우리가 설정한 프로퍼티
let resultCount: Int
let tracks: [Track]
enum CodingKeys: String, CodingKey { // 실제 내려온 키를 우리가 설정한 프로퍼티로 할당
case resultCount
case tracks = "results"
}
}
struct Track: Codable { // 1.에서 우리가 설정한 프로퍼티
let title: String
let artistName: String
let thumbnailPath: String
enum CodingKeys: String, CodingKey { // 실제 내려온 키를 우리가 설정한 프로퍼티로 할당
case title = "trackName"
case artistName
case thumbnailPath = "artworkUrl100"
}
}
3. 파싱하고 트랙 정보 출력하기
파싱이란
리스폰스 데이터를 가공해서 오브젝트로 만들어 내는 과정을 뜻합니다.
파싱 전에 do try-catch문을 사용할 건데
do try-catch문은 예외를 처리할 수 있습니다
예를들어
'작업 A를 try해보고 에러가 생기면 catch문 B를 실행해라' 이런 예시입니다.
약간 if문이랑 비슷한 느낌이 드실 수 있습니다.
그럼 코드로 한번 확인해 보겠습니다.
do {
let decoder = JSONDecoder()
let response = try decoder.decode(Response.self, from: resultData)
//decoder를 이용해서 .디코딩을 할 건데, Response 형태로 디코딩를 할거다 resultData로 부터)
let tracks = response.tracks
print("--->tracks: \(tracks.count) - \(tracks.first?.title), \(tracks.first?.thumbnailPath)")
// 트랙 수와, 트랙이름, 섬네일 출력하겠다.
} catch let error {
print("---> error: \(error.localizedDescription)")
// JSONDecoder()는 json형식을 오브젝트로 디코딩할 때, 우리가 프로토콜로 설정한 codable로 이행해 주기 위함입니다.
출력 결과물
※ artworkURL30짜리는 눈에 안보여서 100짜리로 출력했습니다.
'iOS > Swift 문법' 카테고리의 다른 글
[Swift] Segueway 정리 (0) | 2022.08.11 |
---|---|
[Swift] AVFoundation에 대하여 (0) | 2022.04.07 |
[Swift] URLSession을 통한 Networking(코드확인 편) (0) | 2022.03.24 |
[Swift]URLSession을 통한 네트워킹 (0) | 2022.03.23 |
[Swift] GCD / Queue / Sync 와Async 차이 (0) | 2022.03.23 |