Moya /Moya

Network abstraction layer written in Swift.

★ 15,353⑂ 1,990
SwiftCreated 2014-08-16moya.github.io
15,353
stars
+0+0+0
1,990
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

Moya 15.0.0








在这里查看英文版文档

你是个聪明的开发者。你可能使用 Alamofire 来抽象对 URLSession 的访问,以及所有那些你并不关心的糟糕细节。但是接下来,就像许多聪明开发者一样,你编写专有的网络抽象层,它们可能被称作 "APIManager" 或 "NetworkModel",它们的下场总是很惨。

!Moya Overview

在 iOS app 中,专有网络层非常常见,但它们有以下缺点:

- 编写新项目很困难(「我从哪儿开始呢?」)
- 维护现有的项目很困难(「天啊,这一团糟……」)
- 编写单元测试很困难(「我该怎么做呢?」)

所以 Moya 的基本思想是,提供一些网络抽象层,它们经过充分地封装,并直接调用 Alamofire。它们应该足够简单,可以很轻松地应对常见任务,也应该足够全面,应对复杂任务也同样容易。

 如果你使用 Alamofire 来抽象 URLSession,那为什么不使用某些方式来进一步抽象 URLs 和 parameters 等等的本质呢?

Moya 的一些特色功能:

- 编译时检查正确的 API 端点访问。
- 允许你使用枚举关联值定义不同端点的明确用法。
- 将 test stub 视为一等公民,所以单元测试超级简单。

你可以在 愿景文档 中查看更多关于项目方向的信息。

 示例项目

我们在仓库中提供了两个示例项目。要使用它,请下载仓库,运行 carthage update 下载所需的库,然后打开 Moya.xcodeproj。你会看到两个 scheme:Basic 和 Multi-Target ——选择一个然后构建并运行!这些源文件位于项目导航的 Examples 目录中。玩得开心!

 项目状态

这个项目正在积极地开发中,并且它正被用于 Artsy 的新拍卖应用。我们认为它已经可以用于生产了。

 安装

 Moya 版本 vs Swift 版本

下边的表格展示了 Moya 版本与其对应的 Swift 版本。

| Swift | Moya           | RxMoya          | ReactiveMoya   |
| ----- | -------------- |---------------- |--------------- |
| 5.X   | = 13.0.0      | = 13.0.0       | = 13.0.0      |
| 4.X   | 9.0.0 - 12.0.1 | 10.0.0 - 12.0.1 | 9.0.0 - 12.0.1 |
| 3.X   | 8.0.0 - 8.0.5  | 8.0.0 - 8.0.5   | 8.0.0 - 8.0.5  |
| 2.3   | 7.0.2 - 7.0.4  | 7.0.2 - 7.0.4   | 7.0.2 - 7.0.4  |
| 2.2   |  注意:如果你在你的项目中使用 Swift 4.2,但是同时使用了 Xcode 10.2,那么 Moya 13 也能够正常工作,即使我们使用了 Swift 5.0。

升级到 Moya 的最新主版本?查看我们的 迁移向导。

 Swift Package Manager

 注意:以下的说明都未使用 Xcode 内嵌的 UI 版 Swift PM。使用 Swift PM 的最简单的方式是找到 Project Setting - Swift Packages 并将 Moya 添加在其中。

要使用苹果的 Swift Package Manager 集成,将以下内容作为依赖添加到你的 Package.swift:

swift
.package(url: "https://github.com/Moya/Moya.git", .upToNextMajor(from: "15.0.0"))


然后指定 "Moya" 为你想要使用 Moya 的 Target 的依赖。如果你想要使用响应式扩展,将 "ReactiveMoya" 和 "RxMoya" 也也作为依赖加入进来。这里是一个 PackageDescription 实例:

swift
// swift-tools-version:5.3
import PackageDescription

let package = Package(
    name: "MyPackage",
    products: [
        .library(
            name: "MyPackage",
            targets: ["MyPackage"]),
    ],
    dependencies: [
        .package(url: "https://github.com/Moya/Moya.git", .upToNextMajor(from: "15.0.0"))
    ],
    targets: [
        .target(
            name: "MyPackage",
            dependencies: ["ReactiveMoya"])
    ]
)


注意:如果你正在使用 ReactiveMoya,我们正在使用我们自己 fork 版本的 ReactiveMoya。这个 fork 版本添加了 2 个 commits 用于移除在发行版(开始于 6.1.0)上的测试依赖。这是为了防止 Xcode 在 Xcode 11/11.1 上的 Xcode Previews 建立测试依赖项(FB7316430)。如果你不想使用我们的 fork 版本,你可以在你的 SPM package 列表中添加另一个依赖:[email protected]:ReactiveCocoa/ReactiveSwift.git,这样它就会从原仓库拉取代码。

 Accio

Accio 是一个建立在 SwiftPM 之上的依赖管理器,它为 iOS/macOS/tvOS/watchOS 创建 frameworks 库。因此使用 Accio 集成 Moya 的步骤与以上几乎相同。一旦你的 Package.swift文件配置完成,运行 accio update 而不是 swift package update 即可。

 CocoaPods

在你的 Podfile 文件中添加 Moya:

rb
pod 'Moya', '~ 15.0'

 or 

pod 'Moya/RxSwift', '~ 15.0'

 or

pod 'Moya/ReactiveSwift', '~ 15.0'

 or

pod 'Moya/Combine', '~ 15.0'


然后运行 pod install。

在任何你想使用 Moya 的文件中,使用 import Moya 导入框架。

 Carthage

Carthage 用户可以指向这个仓库并使用他们喜欢的生成框架,Moya,RxMoya 或者 ReactiveMoya。

在你的 Car

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON