iOS/Swift 문법

[Swift] URLSession으로 받은 데이터를 오브젝트로 가져오기(

Chafle 2022. 3. 24. 20:55
반응형
오늘의 목표: 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 디코딩하게 하기 위해서)

 

실제 내려온 url에서 우리가 구하고 싶은 key.. 눈이 아픕니다..

 각 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짜리로 출력했습니다.

반응형