gpt4 book ai didi

ios - 带参数的 Alamofire 4 Swift 3 GET 请求

转载 作者:搜寻专家 更新时间:2023-11-01 05:52:45 25 4
gpt4 key购买 nike

我正在使用 Alamofire 4 和 Swift 3 构建网络堆栈。按照 Alamofire 指南,我为服务端点创建了一个路由器。我目前正在使用 OpenWeatherMap 的免费 API,但在创建获取请求时发现问题。这就是所需的网址:http://api.openweathermap.org/data/2.5/weather?q=Rome&APPID=MY_API_KEY .粘贴在浏览器上,并使用真正的 API key ,它可以工作,并返回我漂亮的 json,其中包含给定位置的天气信息。在我的应用程序上,我可以将参数作为字典插入,但我找不到在 url 末尾附加 api key 的方法。

那是我的枚举路由器:

enum OWARouter: URLRequestConvertible {
case byCityName(parameters: Parameters)

// MARK: Url
static let baseURLString = "http://api.openweathermap.org"
static let apiKey = "MY_APY_KEY"
static let pathApiKey = "&APPID=\(apiKey)"
var method: HTTPMethod {
switch self {
case .byCityName:
return .get
}
}

var path: String {
switch self {
case .byCityName:
return "/data/2.5/weather"
}
}

// MARK: URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let url = try OWARouter.baseURLString.asURL()
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
switch self {
case .byCityName(let parameters):
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
print((urlRequest.url)!)

}

urlRequest.httpMethod = method.rawValue
return urlRequest
}
}

当我登录我的 (urlRequest.url) 时!我有这个:http://api.openweathermap.org/data/2.5/weather?q=Rome但我找不到添加 apiKey 的方法。我做错了什么?

我还做了一个丑陋的测试,在打印后添加了这段代码:

        var urlRequest2 = URLRequest(url: (urlRequest.url)!.appendingPathComponent(OWARouter.pathApiKey))
print("URL2: \(urlRequest2)")

日志是 URL2:http://api.openweathermap.org/data/2.5/weather/&APPID=My_API_KEY?q=Romeapi key怎么在中间?

如果您需要,这是简单的请求代码:

   Alamofire.request(OWARouter.byCityName(parameters: ["q":"Rome"])).responseJSON { response in

print(response.request)
print(response.response)
print(response.data)
print(response.result)

debugPrint(response)

if let JSON = response.result.value {
print("json: \(JSON)")
}
}

另一个问题...如果我使用参数 ["q":"Rome, IT"],我的输出 url 是:http://api.openweathermap.org/data/2.5/weather?q=Rome%2CIT

如何保留逗号?

谢谢!

最佳答案

Swift - 5 Alamofire 5.0 更新代码(只需根据您的要求更改 AF.request 方法,您还可以添加参数 header 和拦截器)

Alamofire.request(url, method: .get, encoding: JSONEncoding.default)
.responseJSON { response in

switch response.result {

case .success(let json):
print(json)
DispatchQueue.main.async {

// handle your code

}
case .failure(let error):
print(error)
}
}

关于ios - 带参数的 Alamofire 4 Swift 3 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com