前言
在移动端的开发中,网络请求是必不可少的。之前写过Alamofire的简单使用,但是一般开发中都会对这些第三库封装,然后使用,之前自己封装的demo也是借鉴了一些Moya的设计思路。今天就介绍一下Moya一个帮助你处理网络层的第三方框架。
介绍
Moya
Moya是一个帮助我们管理Alamofire的网络管理层,可以让我们去更清晰的去管理我们的网络请求。
Moya的版本 VS Swift版本
集成方式
Moya本身支持多种集成,本文使用CocoaPods集成。Moya本身就支持了对RxSwift的扩展,所以我们只需要在Podfile里添加一下:
pod 'Moya', '~> 10.0'
# or
pod 'Moya/RxSwift', '~> 10.0'
然后执行 pod install
在使用的文件中,引入即可:import Moya
简单使用
定义枚举,存储网络请求
// 1 定义一个枚举,存放我们的网络请求
enum ApiManager {
case login(username:String,password:String,token:String)
}
实现moya的TargetType协议
extension ApiManager:TargetType{
var baseURL: URL {
return URL.init(string: BaseURL)!
}
//请求路径
var path:String{
switch self {
case .login(username: _, password:_ , token:_):
return "login/accountLogin"
}
}
var headers: [String: String]? {
return nil;
}
//请求的参数
var parameters: [String: Any]? {
switch self {
case .login(username: let userName, password: let pwd, token: let token):
return ["account":userName,"pwd":pwd,"deviceToken":token];
}
}
///请求方式
var method: Moya.Method {
switch self {
case .login(username: _, password: _, token: _):
return .post;
}
}
/// The method used for parameter encoding.
var parameterEncoding: ParameterEncoding {
return URLEncoding.default
}
/// Provides stub data for use in testing.
var sampleData: Data {
return "".data(using: String.Encoding.utf8)!
}
//MARK:task type
var task: Task {
return .requestPlain
}
var validate: Bool {
return false
}
}
发起网络请求
let provider = MoyaProvider<ApiManager>();
provider.request(.login(username: "haha", password: "123456", token: "qwe")) { (result) in
if result.error == nil{
LLog(result.value);
}
}
RxSwift
RxSwift是一个可以帮助我们简化异步编程的框架,类似于OC的RxCocoa、Java的RXJava、JS的rxjs、kotlin的RxKotlin等,属于Rx家族的一员。学习曲线,相对陡峭。适用于MVVM框架,身边的开发者,对其也是褒贬不一。个人感觉还是一个值得开发者去学习、使用的框架。这边文章就不详细介绍,具体的可移步查看RXSwi