<commit_before># (供应者)Providers

当使用Moya时, 您通过MoyaProvider实例进行所有API请求,并把指定要调用哪个Endpoint的enum的值传递给它。在你设置了 [Endpoint](Endpoints.md)之后, 基本用法实际上配置完毕了:

```swift
let provider = MoyaProvider<MyService>()
```

在如此简单的设置之后您就可以直接使用了:

```swift
provider.request(.zen) { result in
    // `result` is either .success(response) or .failure(error)
}
```

到此完毕! `request()` 方法返回一个`Cancellable`, 它有一个你可以取消request的公共的方法。 更多关于`Result`类型的的信息查看 [Examples](Examples) 

记住,  把target和provider放在*哪儿*完全取决于您自己。 您可以查看 [Artsy的实现](https://github.com/artsy/eidolon/blob/master/Kiosk/App/Networking/ArtsyAPI.swift)
的例子.

但是别忘了持有它的一个引用 . 如果它被销毁了你将会在response上看到一个 `-999 "canceled"` 错误 。

## 高级用法

为了解释 `MoyaProvider`所有的配置选项我们将会按照下面的小节一个一个的来解析 。

### （endpoint闭包）endpointClosure:

  `MoyaProvider` 构造器的第一个(可选的)参数是一个
endpoints闭包, 它负责把您的enum值映射成一个`Endpoint`实例对象。 让我们看看它是什么样子的。

```swift
let endpointClosure = { (target: MyTarget) -> Endpoint in
    let url = URL(target: target).absoluteString
    return Endpoint(url: url, sampleResponseClosure: {.networkResponse(200, target.sampleData)}, method: target.method, task: target.task)
}
let provider = MoyaProvider(endpointClosure: endpointClosure)
```

注意在这个`MoyaProvider`的构造器中我们不再有指定泛型 ，因为Swift将会自动从`endpointClosure`的类型中推断出来。 非常灵巧!

您有可能已经注意到了`URL(target:)` 构造器, Moya 提供了一个便利扩展来从任意 `TargetType`中创建 `URL`。

这个`endpointClosure`就像您看到的这样简单. 它其实也是Moya的默认实现， 这个实现存储在 `MoyaProvider.defaultEndpointMapping`.
查看 [Endpoints](Endpoints.md) 文档来查看 _为什么_ 您可能想自定义这个。<commit_msg>Update Providers.md<commit_after># (供应者)Providers

当使用Moya时, 您通过MoyaProvider实例进行所有API请求,并把指定要调用哪个Endpoint的enum的值传递给它。在你设置了 [Endpoint](Endpoints.md)之后, 基本用法实际上配置完毕了:

```swift
let provider = MoyaProvider<MyService>()
```

在如此简单的设置之后您就可以直接使用了:

```swift
provider.request(.zen) { result in
    // `result` is either .success(response) or .failure(error)
}
```

到此完毕! `request()` 方法返回一个`Cancellable`, 它有一个你可以取消request的公共的方法。 更多关于`Result`类型的信息查看 [Examples](Examples) 

记住,  把target和provider放在*哪儿*完全取决于您自己。 您可以查看 [Artsy的实现](https://github.com/artsy/eidolon/blob/master/Kiosk/App/Networking/ArtsyAPI.swift)
的例子.

但是别忘了持有它的一个引用 . 如果它被销毁了你将会在response上看到一个 `-999 "canceled"` 错误 。

## 高级用法

为了解释 `MoyaProvider`所有的配置选项我们将会按照下面的小节一个一个的来解析 。

### （endpoint闭包）endpointClosure:

  `MoyaProvider` 构造器的第一个(可选的)参数是一个
endpoints闭包, 它负责把您的enum值映射成一个`Endpoint`实例对象。 让我们看看它是什么样子的。

```swift
let endpointClosure = { (target: MyTarget) -> Endpoint in
    let url = URL(target: target).absoluteString
    return Endpoint(url: url, sampleResponseClosure: {.networkResponse(200, target.sampleData)}, method: target.method, task: target.task)
}
let provider = MoyaProvider(endpointClosure: endpointClosure)
```

注意在这个`MoyaProvider`的构造器中我们不再有指定泛型 ，因为Swift将会自动从`endpointClosure`的类型中推断出来。 非常灵巧!

您有可能已经注意到了`URL(target:)` 构造器, Moya 提供了一个便利扩展来从任意 `TargetType`中创建 `URL`。

这个`endpointClosure`就像您看到的这样简单. 它其实也是Moya的默认实现， 这个实现存储在 `MoyaProvider.defaultEndpointMapping`.
查看 [Endpoints](Endpoints.md) 文档来查看 _为什么_ 您可能想自定义这个。
{'fraction_non_alphanumeric': 0.12681772066283395, 'fraction_numerical': 0.004058167061210686, 'mean_word_length': 7.674486803519062, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7207667', 'n_tokens_mistral': 1576, 'n_tokens_neox': 1633, 'n_words': 182}