ALNetWorkingSwift使用文檔

前言

這幾個(gè)月因?yàn)橛捎诟鞣N事各種忙,所以都沒有寫文章奕巍。還有一個(gè)比較重要的原因就是不知道寫哪些比較有質(zhì)量的文章來供大家閱讀化漆,這樣說來的話拗军,恰恰是違反了我自己寫文章的初心:記錄自己日常開發(fā)遇到的問題以及解決方案憾筏,目的是供自己和他人以后查閱。

閑話不多說花鹅,前段時(shí)間由于公司需要設(shè)計(jì) swift 語言編寫的公共庫氧腰。所以,我這邊除了研究整個(gè)公共庫的整體設(shè)計(jì)之外刨肃,還重點(diǎn)研究了關(guān)于 swift 網(wǎng)絡(luò)框架以及相關(guān)第三方庫的設(shè)計(jì)源碼和設(shè)計(jì)思想古拴。

框架設(shè)計(jì)

ALNetWorkingSwift 框架是我前段時(shí)間研究 AFNetworkingAlamofire真友、Moya黄痪、HandyJSONObjectMapper 等框架,總結(jié)提煉出的網(wǎng)絡(luò)框架盔然。不過相對(duì)于 Moya 這個(gè)框架來說桅打, ALNetWorkingSwift 是一個(gè)比較輕量級(jí)的網(wǎng)絡(luò)框架。

設(shè)計(jì)初心

其實(shí)愈案,編寫和設(shè)計(jì)這個(gè) ALNetWorkingSwift 框架為了解決的一個(gè)問題就是能夠讓開發(fā)者在 Swift 項(xiàng)目中挺尾,可以更加快速方便的發(fā)起 HTTP/HTTPS 請(qǐng)求,并且能夠直接拿到已經(jīng)映射好的 Model 模型站绪,自動(dòng)打印出接收到的數(shù)據(jù)遭铺。

依賴關(guān)系

為了解決開發(fā)者能夠直接能拿到網(wǎng)絡(luò)請(qǐng)求返回的數(shù)據(jù)模型,以及能夠方便的發(fā)起網(wǎng)絡(luò)請(qǐng)求恢准。這邊選用的是對(duì) AlamofireHandyJSON 進(jìn)行二次封裝魂挂。其中, Alamofire 網(wǎng)絡(luò)框架是發(fā)起網(wǎng)絡(luò)請(qǐng)求馁筐,HandyJSON 則是用于映射生成 Model涂召。

ALNetWorkingSwift 框架的依賴關(guān)系以及需要達(dá)到的效果圖如下:

依賴關(guān)系圖

架構(gòu)圖

ALNetWorkingSwift 框架,其中有一個(gè) Core 模塊眯漩,開發(fā)者可用直接使用 cocoapods 只依賴 Core 模塊芹扭,整體的架構(gòu)如下圖所示:

[圖片上傳失敗...(image-1e58f3-1542529899141)]

如上圖所示麻顶,開發(fā)者主要是調(diào)用 ALNetHTTPRequestOperationManager 類進(jìn)行網(wǎng)絡(luò)請(qǐng)求,其中可以通過 ALNetHTTPCommonConfig 進(jìn)行基本配置舱卡,最后請(qǐng)求后回調(diào)的結(jié)構(gòu)體是遵守 ALNetHTTPResponse 協(xié)議的結(jié)構(gòu)體辅肾。結(jié)構(gòu)體里面定義的 data 字段是一個(gè)泛型用于業(yè)務(wù)中使用。所以轮锥,可以根據(jù)不同的項(xiàng)目依賴 Core 模塊矫钓,在項(xiàng)目中定制適合自己的網(wǎng)絡(luò)請(qǐng)求模塊。

在架構(gòu)圖中舍杜,網(wǎng)絡(luò)請(qǐng)求是基于 Core 模塊進(jìn)行發(fā)送請(qǐng)求和解析數(shù)據(jù)的新娜。目前,這個(gè)模塊封裝的比較輕量級(jí)既绩,靈活性也比較高概龄。接下來具體介紹 Core 模塊的架構(gòu),如下圖所示:

Core模塊架構(gòu)圖

基本使用說明

您可以調(diào)用該方法來初始化一個(gè)通用的網(wǎng)絡(luò)請(qǐng)求:

ALHTTPRequestOperationManager.default.requestBase(httpMethod: .get, url: "https://www.baidu.com", urlEncoding: TURLEncoding.default, parameter: nil) { (response) in        
    switch response.result {
    case .success(let res):
        print(res)
    case .failure(let err):
        print(err)
    }
}

您也可以調(diào)用以下方法來上傳數(shù)據(jù):

ALHTTPRequestOperationManager.default.uploadBase(url: "https://www.baidu.com", multipartFormData: { (formData) in
    // The assembly to upload data
}) { (result) in
    switch result {
    case .success(let request, let streamingFromDisk, let streamFileURL):
        print(request)
        print(streamingFromDisk)
        print(streamFileURL ?? "")
    case .failure(let err):
        print(err)
    }
}

此處返回的成功或失敗的判定是相對(duì)于服務(wù)器而言的饲握,而不是業(yè)務(wù)相關(guān)的狀態(tài)碼私杜。也就是說網(wǎng)絡(luò)請(qǐng)求收到的不合法的數(shù)據(jù)或者服務(wù)器異常的情況,會(huì)判定失敗救欧。

高級(jí)用法

您還可以重新封裝這兩種方法以滿足業(yè)務(wù)需求衰粹。

為了符合 ALCommonConfigProtocol,結(jié)構(gòu)體需要實(shí)現(xiàn)一些屬性和方法:

public struct HTTPConfig: ALCommonConfigProtocol {
    
    public var kHttpUserAgent: String = ""
    
    init() {
        
    }
    
    public func getHeader(dictHeader: [String: String]? = nil) -> [String: String] {
        var header: [String:String] = [String: String]()
        if dictHeader != nil {
            header.merge(dictHeader!) { (_, new) in new }
        }
        return header
    }
    
    public func getContentType(contentType: Set<String>? = nil) -> Set<String> {
        var content: Set<String> = Set<String>()
        contentType?.forEach({ (ele) in
            content.insert(ele)
        })
        return content
    }
}

然后,調(diào)用這個(gè)方法:

ALHTTPRequestOperationManager.default.httpConfig = HTTPConfig()

框架相關(guān)鏈接

ALNetWorkingSwift

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笆怠,一起剝皮案震驚了整個(gè)濱河市铝耻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹬刷,老刑警劉巖瓢捉,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箍铭,居然都是意外死亡泊柬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門诈火,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兽赁,“玉大人,你說我怎么就攤上這事冷守〉堆拢” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵拍摇,是天一觀的道長亮钦。 經(jīng)常有香客問我,道長充活,這世上最難降的妖魔是什么蜂莉? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任蜡娶,我火速辦了婚禮,結(jié)果婚禮上映穗,老公的妹妹穿的比我還像新娘窖张。我一直安慰自己,他們只是感情好蚁滋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布宿接。 她就那樣靜靜地躺著,像睡著了一般辕录。 火紅的嫁衣襯著肌膚如雪睦霎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天走诞,我揣著相機(jī)與錄音副女,去河邊找鬼。 笑死蚣旱,一個(gè)胖子當(dāng)著我的面吹牛肮塞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姻锁,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猜欺!你這毒婦竟也來了位隶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤开皿,失蹤者是張志新(化名)和其女友劉穎涧黄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赋荆,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笋妥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窄潭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春宣。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫉你,靈堂內(nèi)的尸體忽然破棺而出月帝,到底是詐尸還是另有隱情,我是刑警寧澤幽污,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布嚷辅,位于F島的核電站,受9級(jí)特大地震影響距误,放射性物質(zhì)發(fā)生泄漏簸搞。R本人自食惡果不足惜扁位,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趁俊。 院中可真熱鬧域仇,春花似錦、人聲如沸则酝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沽讹。三九已至般卑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爽雄,已是汗流浹背蝠检。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挚瘟,地道東北人叹谁。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像乘盖,于是被迫代替她去往敵國和親焰檩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 1订框、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_x閱讀 15,968評(píng)論 3 119
  • 今天穿扳,才認(rèn)真看了那個(gè)西雅圖年輕人偷飛機(jī)的故事衩侥。看了之后矛物,心里很難過茫死,但也有一點(diǎn)為他感到輕松的感覺。 在生命的最后7...
    鹿君閱讀 934評(píng)論 0 2
  • 兩個(gè)可能彼此相愛履羞、喜歡的人峦萎,彼此不能成為名義上的夫妻或是公眾面前的男女朋友,只能做個(gè)特別的朋友…… 也許是為顧及家...
    王慶義閱讀 89評(píng)論 0 0
  • 很喜歡宮崎駿說的一句話:“你住的城市下雨了,很想問你有沒有帶傘吧雹,可是我忍住了,因?yàn)槲遗履阏f沒帶,而我又無能為力,就...
    小蹦噠喲閱讀 128評(píng)論 0 0