-
앱 개발 기록 5. AlamofireIOS/프로젝트 2021. 3. 3. 03:33
Alamofire는 iOS의 REST API 통신을 지원해주는
라이브러리이다.
기본 Url 뒤에는 ?을 사용하여 기본인자 정보들을 적고,
기본인자사이에는 &을 붙여 구분지어준다.
그러나 제공하는 api마다 상세한 방식은 다를 수 있으니, doc을 꼭 읽어봐야 한다.ex:
api.openweathermap.org/data/2.5/weather?id=1835847&appid=b39aeb1e660919371efad86125f1a70d&units=metric&lang=kr
api.openweathermap.org/data/2.5/weather (기본 URL)
? (기본URL과 기본인자를 구분하기 위한 특수문자)
id=1835847 (기본 인자)
& (기본인자를 구분하기 위한 특수문자)
appid=b39aeb1e660919371efad86125f1a70d&units=metric (기본 인자)
& (기본인자를 구분하기 위한 특수문자)
lang=kr (기본 인자)
-URL https://honggun-blog.herokuapp.com/READ_CONTENTS -파라미터 JOB: 직업(String) -메서드 POST -반환값 JSON //접근하고자 하는 URL 정보 let URL = "https://honggun-blog.herokuapp.com/READ_CONTENTS" //전송할 파라미터 정보 let PARAM:Parameters = [ //"축구선수" 혹은 "영화배우"를 넣어주세요. "JOB": "영화배우" ] //위의 URL와 파라미터를 담아서 POST 방식으로 통신하며, statusCode가 200번대(정상적인 통신) 인지 유효성 검사 진행 let alamo = AF.request(URL, method: .post, parameters: PARAM).validate(statusCode: 200..<300) //결과값으로 JSON을 받을 때 사용 alamo.responseJSON() { response in switch response.result { //통신성공 case .success(let value): if let jsonObj = value as? [Dictionary<String, Any>] { //JSON 배열의 갯수 print("데이터의 갯수: \(jsonObj.count)") for item in jsonObj { print("\n--------------------------------------------") //JSON 배열의 n번째 값 print("item: \(item)") //JSON의 단일 값 접근 let NAME = item["NAME"]! as? String ?? "" let BORN = item["BORN"]! as? Int ?? 0 let JOB = item["JOB"]! as? String ?? "" print("NAME: \(NAME)") print("BORN: \(BORN)") print("JOB: \(JOB)") } } //통신실패 case .failure(let error): print("error: \(String(describing: error.errorDescription))") } } [출처] 스위프트[Swift] - Alamofire 사용법|작성자 홍군
alamofire 사용방법 예시이다.
JSON을 하나하나 까서 받아온 데이터를 파싱해도 되지만
좀 더 편리한 방법으로 codable 프로토콜을 사용하는 방법이 있다.
leejigun.github.io/JSON_parsing_using_Codable
Codable을 사용한 JSON 데이터 파싱
이번 포스트에서는 Swift4에서 추가된 Codable 프로토콜을 사용해 JSON 데이터를 처리하는 방법을 알아보겠습니다. 과거 제가 처음으로 iOS를 공부할 때에는 JSONSerialization 을 사용한 방법이 책에 나와
leejigun.github.io
Codable이 추가된 이후에 JSON 데이터 파싱을 위한 코드.
let decoder = JSONDecoder() do { let todo = try decoder.decode(Todo.self, from: responseData) completionHandler(todo, nil) } catch { print("error trying to convert data to JSON") print(error) completionHandler(nil, error) }
자동으로 JSON Data를 Todo 구조체로 맵핑하는 동작을 수행합니다.
구조체마다 생성자를 사전에 만들 필요가 없기 때문에 코드도 짧아지고 코딩 시간도 줄었습니다.
Swift ) 왕초보를 위한 Codable / JSON Encoding and Decoding
안녕하세요 :) Zedd입니다. < 최신버전 확인하기 / App Udpate >글쓰다가 갑자기 Codable 개삘 Swift4가 나오기전에, JSON 파싱이 Swift4에서는 한줄로 끝난단다 하는 유튜브 영상을 봐서 오옷했던 기억이 있
zeddios.tistory.com
받아온 JSON 파일을 디코딩하기 위한 코드이다.
struct Person : Codable{ var name : String var age : Int } let jsonString = """ { "name" : "Zedd", "age" : 100 } """ let decoder = JSONDecoder() var data = jsonString.data(using: .utf8) if let data = data, let myPerson = try? decoder.decode(Person.self, from: data) { print(myPerson.name)//Zedd print(myPerson.age)//100 } 출처: https://zeddios.tistory.com/373 [ZeddiOS]
www.hackingwithswift.com/read/7/3/parsing-json-using-the-codable-protocol
Parsing JSON using the Codable protocol - a free Hacking with Swift tutorial
Was this page useful? Let us know! 1 2 3 4 5
www.hackingwithswift.com
codable 프로토콜을 이용하여 JSON을 파싱하는 방법을 설명한 사이트이다.
[Swift] Alamofire를 사용하여 API JSON 데이터 받기 (2/2)
+ 2020.05.18 2020/05/18 - [iyOmSd/Title: Swift] - [Swift] - Alamofire 5.1 변경된 통신 및 Json Dynamic Key 이전글에서는 [Swift] Alamofire를 사용하여 API JSON 데이터 받기 (1/2) Alamofire과 URLSession..
nsios.tistory.com
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
.
.
.
다양한 키값들을 통해서 데이터를 파싱 할 수 있어요
통신 끝!!
더 좋은 방법도 있을 거에요
항상 이 코드만이 답이 아니에요!!
이제 통신 정도는 가뿐ㅎ...하...ㄱ...ㅔ..
출처: https://nsios.tistory.com/22 [NamS의 iOS일기]728x90'IOS > 프로젝트' 카테고리의 다른 글
앱 개발 기록 4. REST (0) 2021.03.01 앱 개발 기록 3. HTTP 메서드 : GET, POST, PUT, PATCH, DELETE (0) 2021.03.01 앱 개발 기록 2. 카카오톡 소셜 로그인 구현하기 (0) 2021.03.01 앱 개발 기록 1. cocoapods & alamofire (0) 2021.02.28