IOS-Moya简单使用-Swift
Moya介绍
Moya是一个基于Swift语言的网络抽象层库,用于简化iOS应用程序中的网络请求和数据处理。它建立在Alamofire之上,提供了一种更简洁、类型安全和易于测试的方式来处理网络请求。
Moya的主要特点包括:
1、类型安全:利用枚举类型定义API端点和请求参数,避免了手动构建URL和参数的繁琐过程。2、易于测试:使用Moya可以更轻松地进行单元测试,因为它将网络请求和数据处理逻辑分离,使得可以更容易地模拟网络请求和处理不同的响应。3、简洁性:Moya提供了一种简洁的方式来定义和执行网络请求,减少了重复的代码和错误。
简单食用
地址:https://github.com/Moya/Moya
使用
创建枚举
对应的就是后台Api接口的方法
import Moyaenum ApiService{case login(login:LoginBN)case getRole(page:Int)
}
遵循TargetType协议
在同一个文件中,通过扩展来遵循协议:
extension ApiService:TargetType{//服务器跟地址var baseURL: URL {let url="http://***/"return URL(string: url)!}//路径var path: String {switch self{case .login:return "login/loginUser"case .getRole:return "staff/findAllRole"}}//请求方法var method: Moya.Method {return .post}//task参数设置var task: Moya.Task {switch self{case .login(let login)://参数是body实体类型的就这样return .requestJSONEncodable(login)case .getRole(let page)://参数是query类型的,就这样let params:[String:Int] = ["page":page]return .requestParameters(parameters: params, encoding: URLEncoding.queryString)}}//头信息var headers: [String : String]? {var headers:Dictionary<String,String> = [:]headers["Content-Type"]="application/json"
// headers["token"]="41aaf0d73b7d4e739f50c9c92924378d"return headers}
}
发起请求
然后创建一个provider 来发起请求
let provider = MoyaProvider<ApiService>()
provider.request(.login(login: login)){result inswitch result{case .success(let response):let data=response.data//data就是请求得到的字节数据let responseBody = String(data: data, encoding: .utf8)let str2 = responseBody!let jsonData = str2.data(using: .utf8)!print(str2)do {let base = try JSONDecoder().decode(BaseBN<UserBN>.self, from: jsonData)let user=base.dataif user != nil {self.login(user: user!)}print(user as Any)} catch {print("Error decoding JSON: \(error)")}breakcase.failure(let error):print(error)break}}