swift4的網絡請求與數據解析

封裝了moya,鏈式,類AFN式請求

SwiftHttpRequest Github地址

簡書地址

Demo說明

Demo主要介紹Swift的網絡部分,代碼已更新到swift4

–網絡部分

請求均採用 Alamofire

請求封裝方式分爲:
* 1.Moya(一個star很多的Alamofire的上層封裝,爲本demo推薦方式。我在使用過程中最終發現moya是極其優美的網絡請求方式)
* 2.鏈式請求(如果你剛剛從OC轉到swift,可能還不適應moya的方式,那麼可以用這種請求方式來過渡)
* 3.仿AFN式請求(這應該是OC中常見的封裝方式,但是真的不再適合swift這個優美的語言啦)

–Progress及信息處理

加載動畫及彈出框採用 MBProgressHUD

–數據解析

在swift4之前,我一直用的是HandyJSON(下面有介紹)。在swift4之後我把model的解析轉到到官方的Codable。

本來這個demo只是我轉swift時用來學習網絡的,但是發現對一些同學很有幫助,所以重新整理了一下代碼,將代碼由swift3升級到swift4,並且拋棄了HandyJSON,因爲swift語言的特性,要學就學最新的,所以demo中不再提供其他josn解析方式的示例

–緩存

緩存部分沒有接入數據庫,而是直接用了write to file,並將緩存封裝到網絡請求方法中

本demo內容可直接用於項目開發,我在項目中大量使用,感覺還不錯哈哈哈


三方庫介紹

Alamofire:Swift中著名的網絡請求庫

Moya:著名的Alamofire封裝,讓網絡請求看起來更加的優美,更有利於閱讀與迭代

MBProgressHUD: 進度條,彈出框,OC寫的庫

Kingfisher: 加載網絡圖片,類似SDWebImage

已棄用

HandyJSON 是阿里巴巴開源的model的映射庫。使用方式類似OC中的MJExtention

ObjectMapper:json解析庫,需要手動寫映射關係

具體可以看在Swift語言中處理JSON - 轉換JSON和Model

接口說明

本demo使用接口爲多米音樂接口
http://v5.pc.duomi.com/search-ajaxsearch-searchall?kw=關鍵字&pi=頁碼&pz=每頁音樂數
請求數據參數:kw=像我這樣的人&pi=1&pz=1

返回實例:

{
"album_offset": 0,
"albums": [
{
"artists": [
{
"id": 61799986,
"name": "Mc名決",
"portrait": null,
"valid": false
}
],
"available": true,
"company": "",
"cover": "http://pic.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn//p1/08/16/72494779.jpg&w=150&h=150&s=100&c=0&o=0&m=",
"id": 2742662,
"name": "像我這樣的人",
"num_tracks": 4,
"release_date": "2017-08-22",
"type": "EP/單曲"
}
],
"artist_offset": 0,
"artists": null,
"dm_error": 0,
"error_msg": "操作成功",
"recommend": 0,
"total_albums": 1,
"total_artists": 0,
"total_tracks": 6,
"track_offset": 0,
"tracks": [
{
"album": {
"cover": "/p1/12/17/72493295.jpg",
"id": 2741390,
"name": "裙娣"
},
"artists": [
{
"id": 61792091,
"name": "DJ馬哥",
"num_albums": 35,
"num_tracks": 233,
"portrait": "",
"valid": false
}
],
"availability": "1110",
"dlyric": "",
"id": 28136457,
"medias": [
{
"bitrate": 320,
"p2purl": "1A4DF5035CE09DB8DF0500000060CFABAC000000A9.mp3"
}
],
"mv": 0,
"slyric": "",
"title": "像我這樣的人",
"isdown": "1",
"isplay": "1"
}
]
}

End


作者語:

希望能達到拋磚引玉的效果

也給新學習swift的朋友一個簡單的網絡處理的方式

大家互相幫助,互相學習

如果對你有幫助還請給個Star,謝謝

版本:

2.0 更新到swift4,重新整理代碼

1.2 新增moya的demo

1.1 新增鏈式請求的封裝

  • 鏈式請求可以只組合需要的函數,本身默認爲常用方式,簡化常用的鏈式調用
  • 對於非默認值的請求可以自定義進行設置

* 方便添加自定義行爲,利於擴展

1.0 類OC中的AFN封裝

  • 利於OC轉swift的同學學習
  • 其中對返回值做了JSON和String兩種解析,String是爲了方便實用HandyJSON,不使用HandyJSON可以自行刪除部分代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章