网址路径中支持Alamofire变量或参数

Alamofire是否在url路径中支持变量,我已经找到了一个示例,但找不到。 我看过他们的文档和单元测试。 带有以下内容的url支持的api编写是很常见的:

http://someapi.com/users/{user}/profile

我在URLEncoding中浏览了它们的示例,但是我找不到上面做的任何事情,示例似乎只添加了查询参数。

gaoshan254000 回答:网址路径中支持Alamofire变量或参数

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))
本文链接:https://www.f2er.com/3067694.html

大家都在问