Alamofire是否在url路径中支持变量,我已经找到了一个示例,但找不到。 我看过他们的文档和单元测试。 带有以下内容的url支持的api编写是很常见的:
http://someapi.com/users/{user}/profile
我在URLEncoding中浏览了它们的示例,但是我找不到上面做的任何事情,示例似乎只添加了查询参数。
Alamofire是否在url路径中支持变量,我已经找到了一个示例,但找不到。 我看过他们的文档和单元测试。 带有以下内容的url支持的api编写是很常见的:
http://someapi.com/users/{user}/profile
我在URLEncoding中浏览了它们的示例,但是我找不到上面做的任何事情,示例似乎只添加了查询参数。
Alamofire依赖于Foundation URL结构,因此您需要查看那里。
URL提供了几种构造它们的机制,您可能使用的是path component,例如:
var url = URL(string: "http://someapi.com/users")
let user = "user"
url?.appendPathComponent(user)
url?.appendPathComponent("profile")
此外,您可以利用枚举进行清理,甚至可以从字符串构造URL,如下所示:
enum MyURLScheme {
case profile(user: String)
var url: URL? {
switch self {
case .profile(let user):
let url = URL(string: "http://someapi.com/users/\(user)/profile")
return url
}
}
}
let profileURL = MyURLScheme.profile(user: "user").url
编辑:您也可以使用Alamofire Router类来构建请求,taken from here:
enum Router: URLRequestConvertible {
case search(query: String,page: Int)
static let baseURLString = "https://example.com"
static let perPage = 50
// MARK: URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let result: (path: String,parameters: Parameters) = {
switch self {
case let .search(query,page) where page > 0:
return ("/search",["q": query,"offset": Router.perPage * page])
case let .search(query,_):
return ("/search",["q": query])
}
}()
let url = try Router.baseURLString.asURL()
let urlRequest = URLRequest(url: url.appendingPathComponent(result.path))
return try URLEncoding.default.encode(urlRequest,with: result.parameters)
}
}
Alamofire.request(Router.search(query: "foo bar",page: 1))