Jiwift

[iOS/Swift] Alamofire JSON 데이터 받아서 파싱하기 본문

라이브러리/Alamofire

[iOS/Swift] Alamofire JSON 데이터 받아서 파싱하기

지위프트 2023. 11. 1. 06:11
반응형

로고

 Alamofire 글을 오랜만에 작성합니다. 우리는 Alamofire를 통해서 데이터를 주고받을 수 있습니다. 오늘 서버에서 응답된 결과를 쉽게 받아서 사용하는 방법을 알아보려고 합니다. 

 

 기존에 Alamofire에서는 응답온 결과를 JSON으로 변환하는 코드를 직접적으로 작성했던 것으로 기억합니다. (기억도 잘 안 나요..) 하지만 지금은 'responseDecodable'라는 메서드가 struct 타입으로 편리하게 변경해 줍니다. 그렇다고 해서 data를 json으로 바꾸고 하는 작업들이 안 쓰이는 것은 아닙니다. 어떤 경우에는 사용이 필요한 경우도 있으니 알아두는 것도 좋습니다.

 

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

 우리는 오늘 위 데이터를 가지고 실습할 예정입니다. 다른 데이터가 있으신분들은 그 데이터들을 이용해 주세요.

 

데이터가 없는 분들은 아래 글을 확인해 주세요. 

REST API Json 호출 테스트 사이트 (tistory.com)

 


struct TestModel: Codable {
    let userId: Int
    let id: Int
    let title: String
    let completed: Bool
}

 우선 responseDecodable에서 사용할 모델을 만들어줍니다. 구조체 타입으로 Codable을 채택합니다. 

 

Codable을 간단하게 설명하자면

Encodable과 Decodable을 상속받는 typealias입니다. 여기서 Encodable과 Decodable이란,

Encodable -> data를 Encoder에서 변환해 주려는 프로토콜로 바꿔주는 것

Decodable -> data를 원하는 모델로 Decode 해주는 것

 

 

let url: String = "https://jsonplaceholder.typicode.com/todos/1"

AF.request(url,
           method: .get)
            .validate(statusCode: 200..<300)
            .validate(contentType: ["application/json"])
            .responseDecodable(of: TestModel.self) { (response) in
                switch response.result {
                case .success(let result):
                    print("성공 출력 : \(result)")
                    print("성공 \(result.userId)")
                    print("성공 \(result.id)")
                    print("성공 \(result.title)")
                    print("성공 \(result.completed)")
                case .failure(let error):
                    print("통신 에러 \(error.localizedDescription)")
                }
            }

  이젠 위에 코드를 통해서 데이터를 받아봅니다. 코드를 확인하면 크게 어려운 점은 없습니다. url을 선언하고 AF(Alamofire)를 통해서 get 메소들 호출합니다. validate를 통해서도 데이터 유효성 검사를 수행합니다. responseDecodable를 사용하면서 위에서 생성한 Model을 넣어줍니다. 

 

 

성공 출력 : TestModel(userId: 1, id: 1, title: "delectus aut autem", completed: false)
성공 1
성공 1
성공 delectus aut autem
성공 false

 validate에 부합하는 데이터가 들어오고 데이터가 model과 큰 차이가 없는 상태에서 result를 출력할 경우 데이터를 사용할 수 있습니다. 이렇게 우리는 제일 기초적으로 데이터를 받는 방법을 알아보았습니다.

 


import UIKit
import Alamofire

struct TestModel: Codable {
    let userId: Int
    let id: Int
    let title: String
    let completed: Bool
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        let url: String = "https://jsonplaceholder.typicode.com/todos/1"
        
        AF.request(url,
                   method: .get)
                    .validate(statusCode: 200..<300)
                    .validate(contentType: ["application/json"])
                    .responseDecodable(of: TestModel.self) { (response) in
                        switch response.result {
                        case .success(let result):
                            print("성공 출력 : \(result)")
                            print("성공 \(result.userId)")
                            print("성공 \(result.id)")
                            print("성공 \(result.title)")
                            print("성공 \(result.completed)")
                        case .failure(let error):
                            print("통신 에러 \(error.localizedDescription)")
                        }
                    }
    }
}
반응형