http://mtsparrow.blogspot.kr/2013/04/ios-json.html
2016년 swift 에서는 어떻게 해야 하는가?
http://mtsparrow.blogspot.kr/2016/03/cocoapod.html
코코아 팟을 이용해서 오픈 소스 중에 JSON과 URLRequest를 편리 하게 해주는
오픈 소스 두개를 추가 한다.
SwiftyJSON
https://github.com/swiftjson/SwiftJson
Alamofire
https://github.com/Alamofire/Alamofire
다음은 간단한 예제 코드이다.
var arrRes = [[String:AnyObject]]() // Array of dictionary
var reqParam = [ String:AnyObject]()
func RequestRestAPI() {
// 요청 키 밸류
// 요청 키 밸류
reqParam = [
"--":"--",
"--":"--",
"--":"--",
"--":"--",
"--":"--",
"--":"--",
"--":"--",
"--":"--",
"--":"--"
]
print(reqParam)
ActIndicator.startAnimating()
Alamofire.request(.POST, "https://URL~~~blahblah/api/", parameters: reqParam).responseJSON { (responseData) -> Void in
self.ActIndicator.stopAnimating()
if responseData.result.value != nil {
let swiftyJsonVar = JSON(responseData.result.value!)
print(swiftyJsonVar["result"])
print(swiftyJsonVar["message"])
if swiftyJsonVar["result"].stringValue == "true" {
if let resData = swiftyJsonVar["data"].arrayObject {
self.arrRes = resData as! [[String:AnyObject]]
}
print(self.arrRes)
// 응답 성공 arrRes에 딕셔너리에서 결과 키 밸류를 이용해서 처리 한다.
} else {
// 에러 응답 처리
}
} else {
// 네트워크 에러 처리
// 네트워크 에러 처리
}
}
}
간단하게 설명을 하자면
ActIndicator.startAnimation()은 엑티비티 인디케이터를 네트워크 시작시 에니메이션을 시작 한다.
Alamofire.request 로 REST API에 URL을 주고 reqParam으로 정의된 키벨류를 전달 한다.
네트워크 요청이 완료되면 Alamofire.request의 블럭 코딩 부분이 수행되며 액티비티 인디케이터 에니 메이션을 종료 하고 SwiftyJSON을 이용한 결과 데이터를 얻어내면 된다.
위 예제는 응답 결과를 JSON을 받고 약속된 프로코톨로 result, message, data 키로 받게 되어 있다.
REST API마다 JSON의 형태는 다를 것이고 이경우 result, message, data는 동일 하며
data의 형태는 다시 키벨류 쌍으로 REST API tag의 따라 다양하게 정의된 경우 이다.
// 응답 성공의 경우 data의 arrayObject를 self.arrRes에 할당 했으며 데이터 타입은 String:AnyObject이다.
정의된 String Key로 값을 접근하면 된다.
댓글 2개:
JSON 데이터 포맷이 규격화 되어있고 자주 쓴다면
https://github.com/tristanhimmelman/AlamofireObjectMapper
을 도입해보는 것도 고려할만합니다.
좋은 정보 감사합니다.
댓글 쓰기