Moya簡單使用方法

最開始自己也是使用Alamofire進(jìn)行網(wǎng)絡(luò)請求摧冀,后面聽說有Moya這種請求方法页眯。一下就喜歡上了。話不多說匙瘪,下面直接上代碼铆铆。

import Moya
import Result

enum API {
    case login(parameters:[String: Any])  // 登錄
    case getAllProjUser // 獲取用戶參與的所有項目
}

然后實現(xiàn)TargetType這個協(xié)議。Xcode會提示需要添加的代碼丹喻,點(diǎn)擊提示自動補(bǔ)全代碼薄货。這里在method會報一個錯誤。需要改成Moya.Method就OK碍论。

extension API:TargetType{
    
    var baseURL: URL {
        return URL(string: "https://www.baidu.com?search=")!
    }
    
    var path: String {
        switch self {
        case .login:
            return "Login"
        case .getAllProjUser:
            return "GetAllProj"
        }
    }
    
    var getPartmeters: [String: Any]{
        
        switch self {
        case let .login(dict):
            return dict
        case .getAllProjUser:
            return [:]
        }
    }
    
    var task: Task {
        return .requestParameters(parameters: getPartmeters, encoding: JSONEncoding.default)
    }
    
    var method: Moya.Method {
        return .post
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var headers: [String : String]? {
        return nil
    }
}

到此谅猾,API設(shè)計就完成了。下一步進(jìn)行網(wǎng)絡(luò)請求方法的代碼骑冗。

在這里赊瞬,我們設(shè)置了myEndpointClosure。主要是設(shè)置超時時間和解決URL帶有贼涩?時巧涧,無法正確的鏈接地址的bug。在沒知道這個之前遥倦,我還是通過修改源碼來解決這個問題谤绳。

import Moya

/// 超時時長
private var requestTimeOut:Double = 30

///endpointClosure
private let myEndpointClosure = { (target: API) -> Endpoint in
    ///主要是為了解決URL帶有占锯?無法請求正確的鏈接地址的bug
    let url = target.baseURL.absoluteString + target.path
    var endpoint = Endpoint(
        url: url,
        sampleResponseClosure: { .networkResponse(200, target.sampleData) },
        method: target.method,
        task: target.task,
        httpHeaderFields: target.headers
    )
    switch target {
    case .login:
        requestTimeOut = 5//按照項目需求針對單個API設(shè)置不同的超時時長
        return endpoint
    default:
        requestTimeOut = 30//設(shè)置默認(rèn)的超時時長
        return endpoint
    }
}


struct Network {
    static let provider = MoyaProvider<API>(endpointClosure: myEndpointClosure)
    
    static func request(_ target: API, successCallback: @escaping ([String:Any]) -> Void,
                        failure failureCallback: @escaping (String) -> Void){
        provider.request(target) { (result) in
            
            switch result{
            case let .success(response):
                if let json = try? response.mapJSON() as! [String:Any]{
                    successCallback(json)
                }
                else{
                    print("服務(wù)器連接成功,數(shù)據(jù)獲取失敗")
                }
            case let .failure(error):
                failureCallback(error.errorDescription!)
            }
        }
    }
    // MARK: - 取消所有網(wǎng)絡(luò)請求
    static func cancelAllRequest(){
        provider.manager.session.getAllTasks { (tasks) in
            tasks.forEach{
                print("取消網(wǎng)絡(luò)請求一次")
                $0.cancel()
            }
        }
    }
}

下一步是使用方法,上代碼缩筛。

 let parameters = ["account":account,"password":password]
 Network.request(.login(parameters: parameters), successCallback: { (json) in
                print(json)
            }) { (msg) in
                print(msg)
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末消略,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瞎抛,更是在濱河造成了極大的恐慌艺演,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐臊,死亡現(xiàn)場離奇詭異胎撤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)断凶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門伤提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人认烁,你說我怎么就攤上這事肿男。” “怎么了却嗡?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵舶沛,是天一觀的道長。 經(jīng)常有香客問我稽穆,道長冠王,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任舌镶,我火速辦了婚禮,結(jié)果婚禮上豪娜,老公的妹妹穿的比我還像新娘餐胀。我一直安慰自己,他們只是感情好瘤载,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布否灾。 她就那樣靜靜地躺著,像睡著了一般鸣奔。 火紅的嫁衣襯著肌膚如雪墨技。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天挎狸,我揣著相機(jī)與錄音扣汪,去河邊找鬼。 笑死锨匆,一個胖子當(dāng)著我的面吹牛崭别,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼茅主,長吁一口氣:“原來是場噩夢啊……” “哼舞痰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诀姚,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤响牛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赫段,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呀打,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年瑞佩,在試婚紗的時候發(fā)現(xiàn)自己被綠了聚磺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡炬丸,死狀恐怖瘫寝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稠炬,我是刑警寧澤焕阿,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站首启,受9級特大地震影響暮屡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毅桃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一褒纲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钥飞,春花似錦莺掠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至结闸,卻和暖如春唇兑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桦锄。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工扎附, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人察纯。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓帕棉,卻偏偏與公主長得像针肥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子香伴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345