Moya简单使用

Moya介绍

Moya是一个基于Swift语言的网络抽象层库,用于简化iOS应用程序中的网络请求和数据处理。它建立在Alamofire之上,提供了一种更简洁、类型安全和易于测试的方式来处理网络请求。

Moya的主要特点包括:

1、类型安全:利用枚举类型定义API端点和请求参数,避免了手动构建URL和参数的繁琐过程。

2、易于测试:使用Moya可以更轻松地进行单元测试,因为它将网络请求和数据处理逻辑分离,使得可以更容易地模拟网络请求和处理不同的响应。

3、简洁性:Moya提供了一种简洁的方式来定义和执行网络请求,减少了重复的代码和错误。

简单食用

地址:https://github.com/Moya/Moya

使用

创建枚举

对应的就是后台Api接口的方法

import Moya

enum 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 in
         switch 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.data
                  if user != nil {
                     self.login(user: user!)
                  }
                  print(user as Any)
              } catch {
                  print("Error decoding JSON: \(error)")
              }
              break
         case.failure(let error):
              print(error)
              break
         }
  }

完成!

你可能感兴趣的:(ios,swift)