Swift Alamofire

轉載:https://www.jianshu.com/p/07b1ec36a689
最近AFNetworking的做者Matt Thompson 提出了一個新的相似AFNetworking的網絡基礎庫,而且專門使用最新的Swift語言寫的,名爲 Alamofire.

 

1、正常導入,CocoaPods

1-一、注意下CocoaPods版本html

gem install cocoapods

CocoaPods 0.39.0+ is required to build Alamofire 3.0.0+.ios

1-2、vim Podfile

  platform :ios, '8.0'
  use_frameworks!
  pod 'Alamofire' 
  //而後 pod install 就OK了 

 

1-3、導入Alamfire 就能夠正常使用了

  import Alamofire 
注意目前可能會出現這個警告;Cannot load underlying module for 'Alamofire',能夠先忽略它,直接 build就沒了

 

 

2、基本使用

GET請求

普通的get請求git

下面是一個天氣預報的請求,時間久了,key 會失效
 let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"]
    Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: parameters)
        .responseJSON { response in

            print("result==\(response.result)")   // 返回結果,是否成功
            if let jsonValue = response.result.value {
                /*
                error_code = 0
                reason = ""
                result = 數組套字典的城市列表
                */
                print("code: \(jsonValue["error_code"])")
            }
    }
     /*
    result==SUCCESS
    code: Optional(0)
    */

 

帶head的get請求github

 let headers = ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"]
 Alamofire.request(.GET, "http://apis.baidu.com/heweather/pro/weather?city=beijing", headers: headers)
        .responseJSON { response in
            print("result==\(response.result)")
            if let jsonValue = response.result.value {
                
                print("weNeedReuslt ==  \(jsonValue)")
            }
  
   }

 

POST 請求

先看看Alamofire 定義了許多其餘的HTTP 方法(HTTP Medthods)可使用。json

public enum Method: String {
case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
}

 

使用GET類型請求的時候,參數會自動拼接在url後面,使用POST類型請求的時候,參數是放在在HTTP body裏傳遞,url上看不到的vim

let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"]
Alamofire.request(.POST, "http://apis.haoservice.com/weather/city", parameters: parameters)
        .responseJSON { response in
            
            print("result==\(response.result)")   // 返回結果,是否成功
            if let jsonValue = response.result.value {
                /*
                error_code = 0
                reason = ""
                result = 數組套字典的城市列表
                */
                print("code: \(jsonValue)")
            }
 }

 

至於加header的post 請求,實際上也是GET 同樣的api

注意點1: 參數編碼方式

除了默認的方式外,Alamofire還支持URL、URLEncodedInURL、JSON、Property List以及自定義格式方式編碼參數。數組

public enum ParameterEncoding {
      case URL
      case URLEncodedInURL
      case JSON
      case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions)
      case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))
}

 

//想要把一個字典類型的數據,使用json格式發起POST請求bash

 let parameters = [
        "one": [1,2,3],
        "two": ["apple": "pig"]
    ]
    
 Alamofire.request(.POST, "http://www.example.com/service", parameters: parameters, encoding: .JSON)

 

注意點2:validate()

將其與請求和響應連接,以確認響應的狀態碼在默承認接受的範圍(200到299)內。若是認證失敗,響應處理方法將出現一個相關錯誤,咱們能夠根據不一樣在完成處理方法中處理這個錯誤。好比下面的樣例,成功時會打印成功信息,失敗時輸出具體錯誤信息。網絡

 Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"])
        .validate()
        .responseJSON { response in
            switch response.result {
            case .Success:
                print("數據獲取成功!")
            case .Failure(let error):
                print(error)
            }
    }

 

注意點3:響應處理方法

觀察上面幾個請求,我都是使用樣例的responseJSON(處理json類型的返回結果)外,Alamofire還提供了許多其餘類型的響應處理方法:

response()
responseData()
responseString(encoding: NSStringEncoding) responseJSON(options: NSJSONReadingOptions) responsePropertyList(options: NSPropertyListReadOptions) 

咱們能夠根據個人實際狀況,選擇本身須要的。

例如 responseData()
 Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"]) .responseData { response in print(response.request) print(response.response) print(response.result) } 

暫時基本使用,總結到此,持續更新中····⛽️

備註參考

https://github.com/Alamofire/Alamofire
http://www.hangge.com/blog/cache/detail_970.html
http://www.cnblogs.com/iCocos/p/4550570.html

相關文章
相關標籤/搜索