Alamofire: URLRequest와 URLSession을 사용하기 편리하도록 만들어 놓은 라이브러리
1. 설치: cocoapods를 이용해서 Alamofire설치.
2. 요청(request)만들기 (하나의 메소드로 끝냄.) :
Alamofire.request(url:URL, method: 요청방식, parameters: [String:String], encoding: 인코딩방식설정, headers:Header)
헤더에 추가하고 싶은게 있다면 headers에 추가.
open API를 찾았는데, 문서에 query(파라미터임). -h 에 있는 부분을 header에 넣음. 예: 인증키
(developers.kakao.com에서 검색 api 참고)
=> method: get, post등
=> parameters: query string을 딕셔너리 작성 - 이게 클라이언트가 서버에게 넘겨주는 데이터
=> encoding:
queryString:get 방식
URLEncoding.httpBody: post 방식
.JSONEncoding.default: json요청인 경우
3. 처리 방식:
Data를 받는 형식
let request = Alamofire.request(“요청주소", method:.get 또는 .post, parameters:[이름:값, ...])request.response{
response in 내용(response.data!하면 다운로드 된 데이터)
}
2) String을 받는 형식
request.response대신에 responseString을 적고 response.result.value!를 호출하면 문자열로 변환돼서 넘어옴.
3) Json을 처리하는 방식
request.response대신에 responseJSON을 적고 response.result.value를 호출하면 파싱된 결과가 넘어옴.
** Alamofire 예제실습.
프로젝트를 생성 - 생성위치를 확인. (Alamofire0725)
터미널을 실행시켜서, 프로젝트가 저장된 디렉터리로 이동.
-> cd 프로젝트가 저장된 디렉터리
저장된 디렉터리는 파인더에서 찾아서 터미널에 drag and drop하면 됨.
3. 터미널에서 pod init 명령을 실행
프로젝트 디렉터리에 Podfile이 생성.
4.podfile을 열어서 alamofire의 의존성 설정.
아래와 같이 pod ‘Alamofire’ 입력 후 저장.
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'Alamofire0725' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'Alamofire'
# Pods for Alamofire0725
end
5. 터미널에서 pod install명령어를 실행.
6.기존열려있던 x-code프로젝트를 닫고 Alamofire0725.xcworkspace파일을 다시 open.
7. ViewController.swift파일에서 import Alamofire를 입력하여 제대로 작동하는지 확인.
import Alamofire
8. ViewController 클래스의 viewDidLoad메소드에 data를 다운로드 받는 코드를 추가
override func viewDidLoad() {
super.viewDidLoad()
//Alamofire를 이용해서 데이터 받아오기
let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)
request.response{
response in
let msg = String(data:response.data!, encoding:String.Encoding.utf8)
print(msg!)
}
}
**** 여기서 문자열을 받아오고 싶으면 아래와 같이 줄여서 작성 가능
//Alamofire를 이용해서 데이터 받아오기
//문자열을 받아오는 메소드
let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)
request.responseString{
response in
print(response.result.value!)
}
9. http 프로토콜을 사용하는 곳이면, info.plist 에 설정을 추가.
*** Alamofire는 비동기적으로 동작하기 때문에 다운로드 상태 표시에 좋음.
Alamofire의 request를 만들기 전에 다운로드를 표시하고, 작업이 종료될 때 다운로드 종료를 표시하면 됨.
import UIKit
import Alamofire
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Alamofire를 이용해서 데이터 받아오기
//문자열을 받아오는 메소드
UIApplication.shared.isNetworkActivityIndicatorVisible = true
let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)
request.responseString{
response in
print(response.result.value!)
sleep(10)
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
}
}
**Kakao Open API활용: JSON
import UIKit
import Alamofire
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Alamofire를 이용해서 데이터 받아오기
//문자열을 받아오는 메소드
UIApplication.shared.isNetworkActivityIndicatorVisible = true
// let request = Alamofire.request("https://httpbin.org/get", method:.get, parameters:nil)
// request.responseString{
// response in
// print(response.result.value!)
// sleep(10)
// UIApplication.shared.isNetworkActivityIndicatorVisible = false
// }
//kakao open API활용
//다운로드 받을 주소 생성
var addr = "https://dapi.kakao.com/v3/search/book?target=title?query="
//"데이터분석"이라는 한글문자열만 인코딩 문자열 만들기
let query =
"데이터분석"
.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
//url을 다시생성
addr = "\(addr)\(query!)"
//print(addr)
//대다수의 Open API는 headers에 앱의 인증키를 삽입해야 함.
let request = Alamofire.request(addr, method:.get, encoding:JSONEncoding.default, headers:["Authorization" : "KaKaoAK 06fab290c9f4eb6f130c09796d57bc30"])
request.responseJSON {
response in
//데이터를 딕셔너리로 변환
let data = response.result.value as! [String:Any]
let documents = data["documents"] as! NSArray
for temp in documents{
let imsi = temp as! NSDictionary
print(imsi["title"] as! String)
let authors = imsi["authors"] as! NSArray
for author in authors{
print(author as! String)
}
}
}
}
}
SwiftyJSON 라이브러리를 사용하면 손쉽게 데이터를 파싱할 수 있음.
'iOS' 카테고리의 다른 글
iOS - UINavigationController + UISearchController + UISearchBarDelegate (0) | 2020.08.10 |
---|---|
iOS - UIImageView를 활용한 Animation 구현 (0) | 2020.07.17 |
iOS - IBOutlet & IBAction (0) | 2020.07.16 |
iOS - TableView Dynamic Cell (0) | 2020.07.14 |
Source Control with Xcode (0) | 2020.07.09 |