Swift 網路請求 : Moya初步認識
使用Moya建立簡單的網路請求
- Moya初始化
open class MoyaProvider<Target: TargetType>: MoyaProviderType
- TargetType
public protocol TargetType
- MoyaProviderType
public protocol MoyaProviderType: AnyObject {
associatedtype Target: TargetType
/// Designated request-making method. Returns a `Cancellable` token to cancel the request later.
func request(_ target: Target, callbackQueue: DispatchQueue?, progress: Moya.ProgressBlock?, completion: @escaping Moya.Completion) -> Cancellable
}
對比OC(簡單的)
如果從OC的網路請求轉為swift的Moya請求.關心的幾個點.
1.怎麼建立請求物件
2.如何設定請求引數
3.回撥事件
1. 建立一個MoyaProvider物件
- a.建立一個testType型別的物件傳給MoyaProvider初始化.
- b.在touchesBegan方法中使用provider發起網路請.
2.testType型別物件
enum testType {
case demo1
case demo2(name: String)
case demo3(name: String, score: Int)
}
這裡用列舉建立了幾種不同的網路請求情況
擴充套件 testType
//通過擴充套件遵循協議 : 當一個型別已經符合了某個協議中的所有要求,卻還沒有宣告遵循該協議時,可以通過空擴充套件體的擴充套件來遵循該協議:
//從現在起,targetTypeDemo的例項可以作為 TargetType 型別使用:
extension testType : TargetType {
// 請求伺服器的根路徑
var baseURL: URL { return URL.init(string: "https://XXXXXXX")! }
// 每個API對應的具體路徑
var path: String {
switch self {
case .demo1: return "/get"
case .demo2(name: _), .demo3(name: _, score: _): return "/post"
}
}
// 各個介面的請求方式,get或post
var method: Moya.Method {
switch self {
case .demo1: return .get
case .demo2, .demo3: return .post
}
}
// 請求是否攜帶引數,如果需要引數,就做如demo2和demo3的設定
var task: Task {
switch self {
case .demo1: return .requestPlain // 無引數
case let .demo2(name): return .requestParameters(parameters: ["name" : name], encoding: URLEncoding.default) // 帶有引數,注意前面的let
case let .demo3(name, score): return .requestParameters(parameters: ["name" : name, "score" : score], encoding: URLEncoding.default) // 帶有引數,注意前面的let
}
}
// 單元測試使用
var sampleData: Data {
switch self {
case .demo1, .demo3: return "just for test".utf8Encoded
case .demo2(let name): return "{\"name\": \(name)\"}".utf8Encoded
}
}
// 請求頭
var headers: [String : String]? {
return ["Content-type" : "application/json"]
}
}
3.回撥事件
provider.request(testType.demo1, callbackQueue: nil, progress: { (response) in
}) { (result) in
}
PS : Moya用了很多的列舉和協議方面知識點.
參考內容:
Swift協議
Moya
Swift moya - 學習筆記
系統性學習Moya+Alamofire+RxSwift+ObjectMapper的配合使用
【iOS開發】Moya入坑記-用法解讀篇
RxSwift: ReactiveX for Swift
相關文章
- iOS 使用Moya網路請求iOS
- Swift 掌控Moya的網路請求、資料解析與快取Swift快取
- RxSwift+Moya+ObjectMapper優雅的網路請求SwiftObjectAPP
- 網路報文初步認識
- Swift 3 網路請求+資料解析Swift
- Swift:面向協議的網路請求Swift協議
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- 初步認識zookeeper
- Mybatis初步認識MyBatis
- Swift開源庫MoyaSwift
- 初步認識Apache IgniteApache
- Spring初步認識-(1)Spring
- 網路請求了
- 網路請求優化之取消請求優化
- 初步認識ida軟體
- 對LinkMapFile的初步認識
- ## 對HDFS的初步認識
- HTTP網路請求原理HTTP
- 網路資料請求
- Android網路請求(2)Android
- 初步認識 k8sK8S
- 快速冪的初步認識(Java)Java
- 低程式碼 —— 初步認識 AppsmithAPPMIT
- OC:封裝網路請求封裝
- Jest中Mock網路請求Mock
- swift tabview 帶引數請求網路。多條目展示。json解析,逃逸閉包SwiftViewJSON
- 應該是最詳細的-swift Moya+handyJSON網路框架的搭建及封裝SwiftJSON框架封裝
- 網路流初步
- OKHttp網路請求原理流程解析HTTP
- 網路請求發展介紹
- Retrofit網路請求原始碼解析原始碼
- Flutter 網路請求框架封裝Flutter框架封裝
- Vue 入門之網路請求Vue
- 【UniApp】-uni-app-網路請求APP
- WKWebView 網路請求Header 丟失WebViewHeader
- 使用retrofit進行網路請求