swift - url 路径中的 Alamofire 变量或参数支持
问题描述
Alamofire 是否支持 url 路径中的变量,我已经寻找了一个示例,但我找不到它。我查看了他们的文档和单元测试。使用以下 url 支持编写 api 是很常见的:
http://someapi.com/users/{user}/profile
我在 URLEncoding 中查看了他们的示例,但我找不到上述任何内容,示例似乎只是添加了查询参数。
解决方案
Alamofire 依赖于 Foundation URL结构,因此您需要查看那里。
URL 提供了几种不同的机制来构建它们,您可以使用的一种是路径组件,例如:
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 类来构建请求,取自此处:
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))
推荐阅读
- mongodb - 如何从烧瓶应用程序的 docker 容器连接到本地 mongodb
- node.js - 我可以将车把模板传递给车把模板,然后将两者一起渲染吗?
- android - 克隆现有的 Android Studio 项目
- c# - 是否可以将项目拖放到列表框中的特定位置?
- java - 设置 JScrollPane.getViewPort() 的背景时没有任何反应
- javascript - 单击辅助按钮时提交表单按钮触发
- python - 使用熊猫数据框分组后的值序列条件
- ruby - 厨师食谱,sssd配置
- github - GitHub Pages - 如何防止链接中的文件名转换为 *.html
- bash - GNU Make如何为不在同一目录中的文件制定静态模式规则?