swift網(wǎng)絡(luò)請(qǐng)求之Alamofire

什么是Alamofire? github開(kāi)源框架

傳統(tǒng)的Objective-C的開(kāi)發(fā)者,一定非常熟悉AFNetworking這個(gè)網(wǎng)絡(luò)框架昆婿。在蘋果推出的Swift之后,AFNetworking的作者專門用Swift來(lái)編寫(xiě)一個(gè)類似AFNetworking的網(wǎng)絡(luò)框架蜓斧,稱為Alamofire
下面我們分別從搭建,使用等不同場(chǎng)景,結(jié)合項(xiàng)目來(lái)分析下Alamofire的網(wǎng)絡(luò)請(qǐng)求

Alamofire的導(dǎo)入

Alamofire我們使用cocopods導(dǎo)入方式:

cd /Users/charles/Desktop/DCApp 
pod init

podfile里面配置如下

 pod 'Alamofire'

終端執(zhí)行pod install

Alamofire的項(xiàng)目的使用

在我們封裝的RequestCenter文件導(dǎo)入Alamofire

import UIKit
import MBProgressHUD
import Alamofire
import ObjectMapper

Alamofire的請(qǐng)求方式

  1. 獲取服務(wù)器資源:GET
let para:[String:Any] = ["syskey":"xxx","moduleKey":"xxx",qtype":qtype,"page":page,"size":size,"username":username]
 let header = ["Accept": "*/*", "X-Requested-With": "APP"]
Alamofire.request("\(BasePath)/api/question/list", method: HTTPMethod.get, parameters: para, encoding: URLEncoding.default, headers: header).responseJSON { (dataResponse) in
                    print(dataResponse)
                    if dataResponse.value != nil
                    {
                  let values = dataResponse.result.value as! NSDictionary
                  let messageDic = values["message"]as! NSDictionary
                  let questionContentArr = messageDic["questionContent"] as! [[String : Any]]
                  if questionContentArr.count != 0 {
                  for dict in questionContentArr
                    {
                        let model = Mapper<ChildInforModel>().map(JSON: dict as! [String:AnyObject])
                        self.childrenModelArray.append(model!)
                    }

}

在這里我們使用ObjectMapper對(duì)返回的數(shù)據(jù)進(jìn)行解析,需在podfile文件中導(dǎo)入ObjectMapper

 pod 'ObjectMapper'

model的映射如下:

//兒童信息Model
class ChildInforModel: Mappable {
    var bindId = ""http://綁定id
    var fatherName = ""
    var fatherPhone = ""
    required init?(map: Map) {
    }
    func mapping(map: Map) {
        bindId <- map["a"]
        fatherName <- map["b"]
        fatherPhone <- map["c"]
 }
}

有沒(méi)有很方便?
2 . 提交資源到服務(wù)器:(請(qǐng)求參數(shù)為字典POST)

 let appid = UserDefaults.standard.value(forKey: "appid") as! String
 let token = UserDefaults.standard.value(forKey: "token") as! String
 let RT = GlobalCenter.sharedInstance().recordTimeString()
 let sig = GlobalCenter.sharedInstance().sha1Str(str: "token=\(token)&ski=\(ski)&RT=\(RT)")
 let para:[String:Any] = ["token":token,"ski":ski,"appid":appid,"RT":RT,"sig":sig]
 let header = ["Accept": "*/*", "X-Requested-With": "APP"]
        Alamofire.request("\(BasePath)/v7/client/loginSyetems", method: HTTPMethod.post, parameters: para, encoding: URLEncoding.default, headers: header).responseJSON { (dataResponse) in
            print(dataResponse)

}

3 . 提交資源到服務(wù)器:(請(qǐng)求參數(shù)為字典轉(zhuǎn)化為字符串仓蛆,再經(jīng)base64編碼)

let para:[String:Any] = ["method":"queryInfo","condition":["no":studentNo]
let requestPara = ["":Base64Encoding(plainString: dicValueString(para)!)]
let header = ["Accept": "*/*", "X-Requested-With": "APP","Content-Type":"application/json;charset=utf-8"]
 Alamofire.request("\(BasePath)", method: HTTPMethod.post, parameters: requestPara, encoding: JSONEncoding.default, headers: header).responseString { (dataResponse) in
                ssPrint(dataResponse.result)
               if dataResponse.result.isSuccess {
               let value = Base64Decoding(encodedString: dataResponse.result.value!.replacingOccurrences(of: "\"", with: ""))
                    completionHandler(value)
}}

字典轉(zhuǎn)字符串:

func dicValueString(_ dic:[String : Any]) -> String?{
    let data = try? JSONSerialization.data(withJSONObject: dic, options: [])
    let str = String(data: data!, encoding: String.Encoding.utf8)
    return str
}

字符串base64編碼

func Base64Encoding(plainString:String)->String
{
    let plainData = plainString.data(using: String.Encoding.utf8)
    let base64String = plainData?.base64EncodedString(options: NSData.Base64EncodingOptions.init(rawValue: 0))
    return base64String!
}

返回的字符串解碼:

func Base64Decoding(encodedString:String)->String
{
    if encodedString.contains("status:404") || encodedString.contains("status:400"){
        return ""
    }  
    let decodedData = NSData(base64Encoded: encodedString, options: NSData.Base64DecodingOptions.init(rawValue: 0))
    let decodedString = NSString(data: decodedData! as Data, encoding: String.Encoding.utf8.rawValue)! as String
    return decodedString
}

請(qǐng)求返回的字符串轉(zhuǎn)字典數(shù)組

func stringValueArr(_ str: String) -> [[String : Any]]?{
    let data = str.data(using: String.Encoding.utf8)
    if let dict = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [[String : Any]] {
        return dict
    }
    return nil
}

應(yīng)用層數(shù)據(jù)處理:

    let dataArray =  stringValueArr(value)
     print("dataArray:",dataArray!)

3 . 圖片(表單)上傳

        let appid = UserDefaults.standard.value(forKey: "appid") as! String
        let jwt = UserDefaults.standard.value(forKey: "jwt") as! String
        let sig111 = sha1Str(str: "appid=\(appid)&NI=\(userId)&RT=\(RT)")
        Alamofire.upload(
            //同樣采用post表單上傳
            multipartFormData: { multipartFormData in
                multipartFormData.append(appid.data(using: String.Encoding.utf8)!, withName: "appid")
                multipartFormData.append(jwt.data(using: String.Encoding.utf8)!, withName: "jwt")
                multipartFormData.append(sig.data(using: String.Encoding.utf8)!, withName: "sig111")
                multipartFormData.append(newImage.pngData()!, withName: "file", fileName: "userPic.png", mimeType: "image/png")
        },to: "\(BasePath1)/api/v1/updatePhotos",encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                //json處理
                upload.responseJSON { response in
                    //解包
                    guard let values = response.result.value else { return }
                    if String(describing: (values as! NSDictionary)["code"]!) == "0" {
}

至此常見(jiàn)的幾種網(wǎng)絡(luò)請(qǐng)求完成!是不是很簡(jiǎn)單,喜歡的話點(diǎn)個(gè)贊吧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挎春,一起剝皮案震驚了整個(gè)濱河市看疙,隨后出現(xiàn)的幾起案子豆拨,更是在濱河造成了極大的恐慌,老刑警劉巖能庆,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件施禾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搁胆,警方通過(guò)查閱死者的電腦和手機(jī)弥搞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渠旁,“玉大人攀例,你說(shuō)我怎么就攤上這事」死埃” “怎么了粤铭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)投慈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冠骄,這世上最難降的妖魔是什么伪煤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮凛辣,結(jié)果婚禮上抱既,老公的妹妹穿的比我還像新娘。我一直安慰自己扁誓,他們只是感情好防泵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蝗敢,像睡著了一般捷泞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寿谴,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天锁右,我揣著相機(jī)與錄音,去河邊找鬼讶泰。 笑死咏瑟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痪署。 我是一名探鬼主播码泞,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狼犯!你這毒婦竟也來(lái)了余寥?” 一聲冷哼從身側(cè)響起领铐,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎劈狐,沒(méi)想到半個(gè)月后罐孝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肥缔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年莲兢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片续膳。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡改艇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坟岔,到底是詐尸還是另有隱情谒兄,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布社付,位于F島的核電站承疲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鸥咖。R本人自食惡果不足惜燕鸽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啼辣。 院中可真熱鬧啊研,春花似錦、人聲如沸鸥拧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)富弦。三九已至沟娱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腕柜,已是汗流浹背花沉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳握,地道東北人碱屁。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛾找,于是被迫代替她去往敵國(guó)和親娩脾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容