當前位置:
                    首頁 >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
swift moya框架+rxswift+handyjson+SwiftyJSON封装和使用教程
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                swift moya框架+rxswift+handyjson+SwiftyJSON封装和使用教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                文章目錄
- target的作用
 - 插件plugin的基本使用添加token
 - 封裝了一個可以判斷token和加載帶轉菊花的plugin
 - Provider的作用和封裝
 - 發送請求調用request方法
 
moya是把alamofire再封裝的一個swift 網絡請求框架.
他和原生的alamofire和 AFNetworking 的區別是.他多了一個 Target和一個plugin
target的作用
一個target可以放多個接口,并且每個接口都可以單獨指定url和請求類型,和參數類型.利用的枚舉類型
 下面代碼展示target的用法.先定義一個 enum類型,然后遵守moya的 TargetType協議.
- baseURL是接口前面的服務器地址,一般都是返回一個.也可以通過不同的case枚舉成員,設置不同的服務器地址
 - path是每個接口的子地址
 - method返回.post 和 .get 等接口請求類型,可以根據不同的枚舉成員返回不同的方法
 - sampleData的解釋是用于測試,暫時用不上
 - task 用于可以設置發送的請求,和請求類型,例如可以設置http請求和json請求,并且可以把參數列表放進去
 - header是請求頭,但是我下面例子注釋掉了,統一返回空的請求頭,因為我把請求頭,放在了Plugin插件協議里面.在這個協議里面可以更好的設置header
 - 下面例子,我在一個叫做JiaZhang的target枚舉對象里面添加了3個接口.我在一個viewModel中,設置了3個接口.login,circle,logout
 
插件plugin的基本使用添加token
PluginType,這個協議,也是我們要自己寫一個子類繼承自PluginType.里面有一個prepare方法是每次發送請求之前執行的.在這里可以添加token,注意要新建一個臨時變量 var request = request,要不然不能更改里面的值
import UIKit import Moya import SwiftyJSON final class TdwMoyaPlugin: PluginType {public func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {var request = requestrequest.addValue("token值", forHTTPHeaderField: "token名字")return request} }封裝了一個可以判斷token和加載帶轉菊花的plugin
import UIKit import Moya import SwiftyJSON public protocol TdwMoyaToken{var existToken:Bool {get} } final class TdwMoyaPlugin: PluginType {//當前的視圖控制器var vc:UIViewControllervar existToken = true//活動狀態指示器(菊花進度條)private var spinner: UIActivityIndicatorView!//插件初始化的時候傳入當前的視圖控制器init(vc:UIViewController) {self.vc = vcspinner = UIActivityIndicatorView(style: .gray)//轉菊花spinner.center = self.vc.view.center}var tokenVal:String {get {guard let myInfo = O2UserDefaults.shared.myInfo else { //加載自己的tokenreturn ""}return myInfo.token ?? ""}}var clientVal:String {get {let version = ProcessInfo.processInfo.operatingSystemVersionlet versionString = "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)"return "iOS \(versionString)"}}public func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {var request = request//加上通用頭request.addValue(clientVal, forHTTPHeaderField: "x-client")if let authorizable = target as? TdwMoyaToken,authorizable.existToken == false {return request}print("clientVal=",clientVal)//加上tokenlet tokenName = O2AuthSDK.shared.tokenName()request.addValue(tokenVal, forHTTPHeaderField: tokenName)print("tokenVal=",tokenVal)print("tokenName=",tokenName)return request}//開始發起請求func willSend(_ request: RequestType, target: TargetType) {//請求時在界面中央顯示一個活動狀態指示器DispatchQueue.main.async {[weak self] inself?.vc.view.addSubview(self!.spinner)self?.spinner.startAnimating()}}//收到請求func didReceive(_ result: Result<Moya.Response, MoyaError>, target: TargetType) {//移除界面中央的活動狀態指示器DispatchQueue.main.async {[weak self] inself?.spinner.removeFromSuperview()self?.spinner.stopAnimating()}//只有請求錯誤時會繼續往下執行guard case let Result.failure(error) = result else { return }//彈出并顯示錯誤信息let message = error.errorDescription ?? "未知錯誤"let alertViewController = UIAlertController(title: "請求失敗",message: "\(message)",preferredStyle: .alert)alertViewController.addAction(UIAlertAction(title: "確定", style: .default,handler: nil))vc.present(alertViewController, animated: true)} }Provider的作用和封裝
- 調用插件plugin
 - 發送請求request
provider是用來發送請求的,里面有request方法.我們使用的時候自己定義一個provider.繼承自框架的MoyaProvider.
之所以繼承的好處是,讓provider可以指定自己的plugin插件,例如我下面的 
發送請求調用request方法
var provider = TdwMoyaProvider(vc: self, existToken: true) provider.request(JiaZhang.login(param)) { json inprint("json=",json) }總結
以上是生活随笔為你收集整理的swift moya框架+rxswift+handyjson+SwiftyJSON封装和使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 用Java实现文本编辑器:创建、浏览、编
 - 下一篇: 免费正确使用计算机ppt,计算机基础课件