开源
MoyaX:基于Moya(重构后)的网络抽象层
来源:元经纪     阅读:732
网站管理员
发布于 2023-05-18 09:28
查看主页

概述

MoyaX 最初是对 Moya 的分叉,是基于Moya,用Swift编写的网络抽象层,但经过多次重构,MoyaX 与 Moya 有很大的不同,包括:

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

但是 MoyaX 认为功能性和反应性支持应该成为扩展,所以在 MoyaX 稳定之前它们暂时被删除了。

要求

  • iOS 8.0+ / Mac OS X 10.9+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 7.3+

安装

CocoaPods

只需添加pod 'MoyaX'到您的 Podfile 即可!

然后运行pod install

Carthage

Carthage 用户可以指向这个仓库

github "jasl/MoyaX"

入门

将 RESTful API 抽象为目标

使用 MoyaX 从定义一个目标开始——它可以是一个struct,class或一个enum需要遵守Target协议的。然后,您的应用程序的其余部分处理这些目标。目标看起来像:

// This struct defined Github show user API
struct GithubShowUser: Target {
  // The username which should requesting
  let name: String
  
  // Constructor
  init(name: String) {
    self.name = name
  }
  
  // Required
  var baseURL: NSURL {
    return NSURL(string: "https://api.github.com")!
  }
  
  // Required
  var path: String {
    return "/users/\(name)"
  }
  
  // Optional, default is .GET
  var method: HTTPMethod {
    return .get
  }
  
  // Optional, default is empty
  var headerFields: [String: String] {
    return [:]
  }
  
  // Optional, default is empty
  var parameters: [String: AnyObject] {
    return [:]
  }
  
  // Optional, default is .URL, means submitting parameters using `x-www-form-urlencoded`
  var parameterEncoding: ParameterEncoding {
    return .url
  }
}

发出请求

您应该通过 访问 Targets MoyaXProvider

// Initialize a MoyaXProvider
let provider = MoyaXProvider()

// Request an API
provider.request(GithubShowUser(name: "jasl")) { response in
  switch response {
  
  // The server has response, 4xx and 5xx goes here too
  case let .response(response):
    let data = response.data
    let statusCode = response.statusCode
    // Handle success here
    
  // Network failure (connectivity or timeout), the request had cancelled or other unexpected errors goes here
  case let .incomplete(error):
    // error is an enum
    // Handle error here
  }
}

上传 MultipartFormData

上传 MultipartFormData 简单高效。

struct UploadingTarget: Target {
  let baseURL = NSURL(string: "https://httpbin.org")!
  let path = "post"
  
  // Remember, .get doesn't support uploading.
  let method = HTTPMethod.post

  // Encoding parameters by multipart/form-data
  let parameterEncoding = ParameterEncoding.multipartFormData

  var parameters: [String: AnyObject] {
    return [
      // MoyaX provides some placeholders for MultipartFormData
      "photo1": FileForMultipartFormData(fileURL: photoFileURL, filename: 'photo1.jpg', mimeType: 'image/jpeg'),
      "photo2": DataForMultipartFormData(data: photoData, filename: 'photo2.jpg', mimeType: 'image/jpeg')
  }
}

// Request a MultipartFormData target is no different with others.
provider.request(UploadingTarget()) { response in
  // Handle response
}

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
创新中国丨西班牙小伙和他的机器人朋友
小米13pro全面升级,影像系统、充电续航等方面带来惊喜
顾家全居,让每一次出门与归家舒心自如
荣威d7dmh世界冠军版将于11月上市,新增“晨曦金”
数贸会数字医疗展区 呈现“未来诊室”

首页

分类

定制方案

消息

我的