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
- RXSwift學習(2)—網路請求Moya的基本使用Swift
- swift 網路請求Alamofire的使用Swift
- swift網路資料請求方法Swift
- Swift:面向協議的網路請求Swift協議
- Swift 3 網路請求+資料解析Swift
- Android HTTP協議請求網路(一)之認識探索AndroidHTTP協議
- [譯]使用 Siesta 處理 Swift 網路請求Swift
- Swift 中的網路請求問題 OC(AFNetworking) && Swift(Alamofire)Swift
- Mybatis初步認識MyBatis
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- 初步認識knockoutjsJS
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Swift開源庫MoyaSwift
- 網路請求了
- Swift學習筆記(3)iOS 9 中的網路請求Swift筆記iOS
- 網路請求優化之取消請求優化
- 初步認識Apache IgniteApache
- Spring初步認識-(1)Spring
- HTTP網路請求原理HTTP
- iOS原生網路請求iOS
- 網路請求圖片
- 網路請求LCNetwork
- 網路資料請求
- Android okHttp網路請求之Get/Post請求AndroidHTTP
- 初步認識 k8sK8S
- 初步認識ida軟體
- 快速冪的初步認識(Java)Java
- OpenStack入門之初步認識
- Jest中Mock網路請求Mock
- OC:封裝網路請求封裝
- Android網路請求(2)Android
- RxJava + Retrofit完成網路請求RxJava
- iOS網路請求穿值iOS