Swift에서 JSON 데이터를 처리하는 작업은 매우 일반적입니다. Codable 프로토콜은 Swift 4에서 도입된 기능으로, JSON 데이터를 쉽게 구조화된 Swift 객체로 변환하고, 그 반대로도 변환할 수 있게 해줍니다.
또한, Alamofire라는 네트워크 라이브러리를 사용하면 서버에서 JSON 데이터를 가져오는 작업을 간편하게 수행할 수 있습니다.
이번 예제에서는 Swift에서 Codable과 Alamofire를 함께 사용하여 JSON 데이터를 처리하는 방법을 알아보겠습니다.
1. Codable을 준수하는 모델 클래스 정의하기
첫 번째로, JSON 데이터를 처리하기 위해 Codable 프로토콜을 준수하는 모델 클래스를 정의해야 합니다. 예를 들어, 다음과 같은 JSON 데이터를 처리하는 모델 클래스를 만들어보겠습니다:
struct Post: Codable {
let id: Int
let title: String
let body: String
}
위의 코드에서 Post
구조체는 Codable
프로토콜을 준수하며, id, title, body라는 세 개의 프로퍼티를 갖고 있습니다.
2. Alamofire를 사용하여 JSON 데이터 가져오기
앞서 정의한 Post
모델 클래스를 활용하여 Alamofire를 사용하여 JSON 데이터를 가져올 수 있습니다. 다음은 Alamofire를 사용하여 JSON 데이터를 가져오는 예제입니다:
import Alamofire
AF.request("https://api.example.com/posts").responseJSON { response in
switch response.result {
case .success(let value):
if let jsonArray = value as? [[String: Any]] {
// JSON 데이터를 가져왔을 때 처리할 로직 작성
let posts = jsonArray.compactMap { Post(json: $0) }
for post in posts {
print(post.title)
}
}
case .failure(let error):
print(error)
}
}
위 코드에서는 Alamofire의 request
메서드를 사용하여 JSON 데이터를 가져옵니다. 가져온 데이터는 responseJSON
클로저에서 처리되며, 성공적으로 가져왔을 경우 success
케이스에서 JSON 데이터를 처리하는 로직을 작성할 수 있습니다.
3. JSON 데이터를 모델 객체로 변환하기
JSON 데이터를 가져왔다면, Codable 프로토콜을 준수하는 모델 클래스로 변환할 수 있습니다. 이를 위해 다음과 같이 Post
구조체에 init(json:)
메서드를 추가합니다:
extension Post {
init?(json: [String: Any]) {
guard let id = json["id"] as? Int,
let title = json["title"] as? String,
let body = json["body"] as? String else {
return nil
}
self.id = id
self.title = title
self.body = body
}
}
이제 JSON 데이터를 가져올 때마다 Post(json: _)
을 호출하여 변환할 수 있습니다.
참고 자료
이 예제는 Codable과 Alamofire를 사용하여 Swift에서 JSON 데이터를 처리하는 기본적인 방법을 보여주었습니다. Codable 프로토콜을 활용하면 JSON 데이터를 구조화된 Swift 객체로 손쉽게 변환할 수 있고, Alamofire를 사용하면 네트워크 작업을 간편하게 처리할 수 있습니다.