mirror of
https://github.com/Moya/Moya.git
synced 2026-03-18 19:52:28 +00:00
65 lines
1.6 KiB
Markdown
65 lines
1.6 KiB
Markdown
# 可选的请求参数
|
|
|
|
假设你想调用 `api/users?limit=10` 也希望能调用 `api/users`:
|
|
|
|
```swift
|
|
public enum MyService {
|
|
case users(limit: Int?)
|
|
}
|
|
|
|
extension MyService: TargetType {
|
|
//...
|
|
public var task: Task {
|
|
switch self {
|
|
case .users(let limit):
|
|
var params: [String: Any] = [:]
|
|
params["limit"] = limit
|
|
return .requestParameters(parameters: params, encoding: URLEncoding.default)
|
|
default:
|
|
return .requestPlain
|
|
}
|
|
}
|
|
//...
|
|
}
|
|
```
|
|
|
|
在这个例子中 `params["limit"] = nil` 等同于移除key `limit`的值 。
|
|
|
|
这对任何类型的请求都适用, 因为方法的类型是在单独的属性中定义的
|
|
|
|
```swift
|
|
extension MyService: TargetType {
|
|
//...
|
|
public var method: Moya.Method {
|
|
switch self {
|
|
case .emailAuth:
|
|
return .post
|
|
default:
|
|
return .get
|
|
}
|
|
}
|
|
//...
|
|
}
|
|
```
|
|
|
|
## 重要声明
|
|
|
|
您 **必须** 像上面演示的那样添加可选参数, 每行一个。 如果您试着把它们初始化在一行中,那么可选参数在值为nil时不会被移除 例如:
|
|
|
|
```swift
|
|
//...
|
|
// This won't work!
|
|
public var parameters: [String: Any]? {
|
|
switch self {
|
|
case .users(let limit):
|
|
let params: [String: Any] = ["limit": limit]
|
|
return .requestParameters(parameters: params, encoding: URLEncoding.default)
|
|
default:
|
|
return .requestPlain
|
|
}
|
|
}
|
|
//...
|
|
```
|
|
|
|
在这种情况下,如果limit值为 ```nil```, URL请求将包含一个像这样的参数 ```api/users?limit=nil``` .
|