swift Alamofire login 忘備録
Alamofireはswiftyjsonと一緒に使うことが多い
Alamofireは、セッション等通信に利用する。
swiftyjsonは 受け取ったjsonレスポンスをswiftに取り込むためと考える。
理由は、jsonのファイルには、配列やオブジェクトが混じっていることが多いが、それをきれいに取り出してくれる仕組みがある。
ここのイニシャライザがわかりやすい。 github.com
SwiftyJSONの使い方
import SwiftyJSON //こんな感じで利用 let json = JSON(data: dataFromNetworking) let json = JSON(jsonObject)
Alamofire(アラモファイアー)のリクエストはこちら
Alamofireのリクエスト例
func request<Parameters: Encodable>(_ convertible: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, interceptor: RequestInterceptor? = nil) -> DataRequest
で実際のコード
//ログインを実装するよ //@escapingは非同期や、他で参照される可能性があるということ。ここでは非同期のため。 func login(userType: String, completionHandler: @escaping (NSError?) -> Void) { //パラメータ requestを生成するため let path = "api/social/convert-token/" let url = baseURL!.appendingPathComponent(path) let params: [String: Any] = [ "grant_type": "convert_token", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "backend": "facebook", "token": AccessToken.current?.tokenString, "user_type": userType ] //ここはリクエストなので、Alamofireを利用 let request = Alamofire.request(url!, method: .post, parameters: params, //ここはAlamofireのURLEncoding()を使うよ encoding: URLEncoding(), headers: nil) //投げたリクエストに対してのレスポンス処理 swiftyjson request.responseJSON { (response) in //responseは .success と .failureが返却されるので、切り分ける switch response.result { //レスポンスが帰ってきたときの処理 case .success(let value): //ここで上記のイニシャライザを利用 let jsonData = JSON(value) //.string!だけで string型にしてくれるだけでなく、nilのときは、そのまま空白を返却してくれる。落ちないので良い self.accessToken = jsonData["access_token"].string! self.refreshToken = jsonData["refresh_token"].string! //セッションが切れるときは、レスポンスのexpires_inに入っているよ self.expired = Date().addingTimeInterval(TimeInterval(jsonData["expires_in"].int!)) completionHandler(nil) break //だめだったときは、エラーをはく。チェックのため。 case .failure(let error): completionHandler(error as NSError) break } }