관리 메뉴

김종권의 iOS 앱 개발 알아가기

[RxSwift 응용] 1. RxAlamofire 본문

RxSwift/RxSwift 응용

[RxSwift 응용] 1. RxAlamofire

jake-kim 2020. 6. 25. 23:26

1. 세팅

1) pod 'RxAlamofire' 설치

2) 앱 내에서 ATS설정 (안할시 request불가)

2. 사용

1) json request

주의 할 점 : disposeBag을 viewDidLoad에 놓으면, viewDidLoad가 사라질 시, dealllc되므로 response되기 전에 종료됨

let disposeBag = DisposeBag() // 전역변수에 두지 않으면, response되기 전에 종료

// 먼저 ATS 설정 할 것
let urlString = "http://friendservice.herokuapp.com/listFriends"

json(.get,
     urlString)
    .debug()
    .subscribe(onNext: { print($0)
    })
    .disposedBag(by: disposeBag)

2) string request

string(나머지 위와 동일..)

 

3) data request

data(나머지 위와 동일..)

 

* response정보와 자료(json)을 따로 보는 법

requestJSON()

requestData()

requestJSON(.get,
            urlString)
    .debug()
    .subscribe(onNext: {(res, json) in
        print(res)
        print("======")
        print(json)
    })

3. Response validation

응답에 대한 처리 

1) validate(statusCode:), validate(contentType:)

let response = request(.get,
                       urlString)
    .validate(statusCode: 100 ..< 300)
    .json()
    .subscribe(onNext: {print($0)})
.validate(contentType: ["txet/json"])

 

ex - API호출)

// json file
(
         {
         firstname = Ivan;
         id = 16192;
         lastname = Petrov;
         phonenumber = "+375251236322";
     },
         {
         firstname = Glen;
         id = 16202;
         lastname = Hurcov;
         phonenumber = "+375291651234";
     },
         {
         firstname = Ivan;
         id = 16222;
         lastname = Smirnoff;
         phonenumber = "+375291232111";
     }
 )
// 먼저 ATS 설정 할 것
let urlString = "http://friendservice.herokuapp.com/listFriends"

requestJSON(.get, urlString)
.subscribe(
    onNext: {res, json in
        print("json=\(json)")
        
        guard let arrObj = json as? NSArray else {return}
        for item in arrObj {
            
            guard let dicObj = item as? [String: Any] else {return}
            
            guard let firstName = dicObj["firstname"] as? String else {return}
            
            print(firstName)
            
        }
})
.disposed(by: db)

/* prints
 Ivan
 Glen
 Ivan
 */

 

Comments