iyOmSd/Title: Swift

[Swift] Alamofire를 사용하여 API JSON 데이터 받기 (2/2)

냄수 2019. 10. 27. 01:33
반응형

+ 2020.05.18

2020/05/18 - [iyOmSd/Title: Swift] - [Swift] - Alamofire 5.1 변경된 통신 및 Json Dynamic Key

 

 

이전글에서는

[Swift] Alamofire를 사용하여 API JSON 데이터 받기 (1/2)

 

Alamofire과 URLSession을 이용한 통신

NS자료형을 이용한 파싱과 JSONDecoder을 이용한 파싱을 해봤어요!!

 

이번에도 라이브러리는 CocoaPods을 통해서 받아올거에요

https://github.com/SwiftyJSON/SwiftyJSON

 

작성일을 기준으로

pod 'SwiftyJSON', '~> 4.0'

를 하면 된다고 하네요!! 

 

버전이 업데이트 될 수 있어서 안먹히는 경우도 많으니까

작성일을 잘 확인해주세요

 

전 게시물에서 Alamofire의 POST통신 형식만 확인했고

GET형식을 하지않았는데 이번에는

GET형식으로 통신하는 코드로 해볼게요

 

 

 

라이브러리를 사용해서 간단하게 JSON을 파싱하는방법

 

import Foundation
import Alamofire
import SwiftyJSON

struct CheckIdService {
    private init() { }
    static let shared = CheckIdService()
    
    let header: HTTPHeaders = [
        "Content-Type" : "application/json"
    ]
    
    func getCheckIdResult(userid: String, completion: @escaping (_ b: Bool) -> Void) {
        
        let url = DanBeeAPI.checkIdURL+"\(userid)"
        
        Alamofire.request(url).responseJSON {
            response in
            
            switch response.result {
            case .success(let value):
                let json = JSON(value)
                let result = json["result"].intValue
                if result == 404 {
                    completion(true)
                }else {
                    completion(false)
                }
                
            default:
                return
            }
        }
    }
}

되게 코드량도 적고 간결해 보이죠??

 

GET통신을 할때는 

POST통신을 할때는 

아무래도 POST는 이것저것 많이들어가다보니 길어질 수도 있고

제가 비효율적인 방법을 사용 했을수도있어요....ㅠ

 

 

쓰는 방법은 마찬가지로 result에는

라이브러리 내장 성공코드가 포함되어있어서

그값을 이용해서 실패와 성공인 경우를 나누면 되요

 

이제 그뒤에 SwiftyJSON을 사용해볼거에요

 

JSON()

를 이용해서 파싱 받을수 있어요

value에는 JSON형식의 데이터가 들어있어요

JSON()을 이용해서 파싱해준 변수 json에는

key 와 value 형태인 Dictionary형 변수가 저장되요

 

key값으론 JSON의 key값이 될거에요

여기서는 [result : Int] 식의 데이터이기때문에

.intValue를 통해서 int 데이터를 받아서 result변수에 저장했어요

 

 

저번에 했던 JSON형식처럼 복잡한 형태라면

 

JSON에서 data는 Array로 존재하므로

arrayValue로 파싱받는데

서버에서 해당되는 값은 1개만 들어오도록 되어있어서

인덱스 0값을 가져올거에요

 

가져오면

id

type

del_yn

name

phone

.

.

.

다양한 키값들을 통해서 데이터를 파싱 할 수 있어요

 

 

통신 끝!!

 

 

더 좋은 방법도 있을 거에요

항상 이 코드만이 답이 아니에요!!

 

이제 통신 정도는 가뿐ㅎ...하...ㄱ...ㅔ..

 

반응형