无法使用 Alamofire 将参数传递给 url
Parameters can't be passed to a url using Alamofire
我已经使用 Alamofire
定义了要传递给 rapidAPI 的参数,但出现错误。
我遵循了他们在 API 文档中所说的一切。如果我将完整的 URL 放入字符串中,它可以正常工作,但是当我作为参数传递时,它不会
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController {
let CURRENT_BR_LEAGUE_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/"
override func viewDidLoad() {
super.viewDidLoad()
let params = ["country_name" : "england", "season" : "2018"]
getLeague(url: CURRENT_BR_LEAGUE_URL, parameters: params)
}
func getHeaders() -> [String : String] {
let headers = [
"X-RapidAPI-Host": "api-football-v1.p.rapidapi.com",
"X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxx"
]
return headers
}
func getLeague (url : String, parameters : [String : String]) {
Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: getHeaders()).responseJSON {
response in
if response.result.isSuccess {
let leagueJSON : JSON = JSON(response.result.value!)
print(leagueJSON)
print()
}
else {
}
}
}
}
它抛出 "wrong country" 错误。如果我使用完整 URL
let CURRENT_BR_LEAGUE_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/england/2018"
效果很好。
如果我使用"https://api-football-v1.p.rapidapi.com/v2/leagues/country/"
并设置参数
let params = ["country_name" : "england", "season" : "2018"]
没用
在您的代码中,您正在发出获取请求。所以你必须传递与你的基地URL绑定的参数。请尝试以下代码,希望它对您有用。
class ViewController: UIViewController {
let CURRENT_BR_LEAGUE_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/%@/%@"
override func viewDidLoad() {
super.viewDidLoad()
let params = ["country_name" : "england", "season" : "2018"]
let urlString = String(format: CURRENT_BR_LEAGUE_URL, params["country_name"],params["season"])
getLeague(url: urlString, parameters: nil)
}
func getHeaders() -> [String : String] {
let headers = [
"X-RapidAPI-Host": "api-football-v1.p.rapidapi.com",
"X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxx"
]
return headers
}
func getLeague (url : String, parameters : [String : String]?) {
Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: getHeaders()).responseJSON {
response in
if response.result.isSuccess {
let leagueJSON : JSON = JSON(response.result.value!)
print(leagueJSON)
print()
}
else {
}
}
}
}
当我现在查看 API-Football 的 RapidApi 文档时,您不需要这些参数。您只需要从不同的部分构建 URL,然后发出 GET 请求。
class ViewController: UIViewController {
let MAIN_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/"
override func viewDidLoad() {
super.viewDidLoad()
getLeague(for: "england", year: 2018)
}
func getHeaders() -> [String : String] {
let headers = [
"X-RapidAPI-Host": "api-football-v1.p.rapidapi.com",
"X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxx"
]
return headers
}
func getLeague (for country : String, year: Int) {
let url = MAIN_URL + country + "/\(year)/"
Alamofire.request(url, method: .get, parameters: nil, encoding: URLEncoding.default, headers: getHeaders()).responseJSON {
response in
if response.result.isSuccess {
let leagueJSON : JSON = JSON(response.result.value!)
print(leagueJSON)
print()
}
else {
}
}
}
}
我已经使用 Alamofire
定义了要传递给 rapidAPI 的参数,但出现错误。
我遵循了他们在 API 文档中所说的一切。如果我将完整的 URL 放入字符串中,它可以正常工作,但是当我作为参数传递时,它不会
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController {
let CURRENT_BR_LEAGUE_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/"
override func viewDidLoad() {
super.viewDidLoad()
let params = ["country_name" : "england", "season" : "2018"]
getLeague(url: CURRENT_BR_LEAGUE_URL, parameters: params)
}
func getHeaders() -> [String : String] {
let headers = [
"X-RapidAPI-Host": "api-football-v1.p.rapidapi.com",
"X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxx"
]
return headers
}
func getLeague (url : String, parameters : [String : String]) {
Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: getHeaders()).responseJSON {
response in
if response.result.isSuccess {
let leagueJSON : JSON = JSON(response.result.value!)
print(leagueJSON)
print()
}
else {
}
}
}
}
它抛出 "wrong country" 错误。如果我使用完整 URL
let CURRENT_BR_LEAGUE_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/england/2018"
效果很好。
如果我使用"https://api-football-v1.p.rapidapi.com/v2/leagues/country/"
并设置参数
let params = ["country_name" : "england", "season" : "2018"]
没用
在您的代码中,您正在发出获取请求。所以你必须传递与你的基地URL绑定的参数。请尝试以下代码,希望它对您有用。
class ViewController: UIViewController {
let CURRENT_BR_LEAGUE_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/%@/%@"
override func viewDidLoad() {
super.viewDidLoad()
let params = ["country_name" : "england", "season" : "2018"]
let urlString = String(format: CURRENT_BR_LEAGUE_URL, params["country_name"],params["season"])
getLeague(url: urlString, parameters: nil)
}
func getHeaders() -> [String : String] {
let headers = [
"X-RapidAPI-Host": "api-football-v1.p.rapidapi.com",
"X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxx"
]
return headers
}
func getLeague (url : String, parameters : [String : String]?) {
Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: getHeaders()).responseJSON {
response in
if response.result.isSuccess {
let leagueJSON : JSON = JSON(response.result.value!)
print(leagueJSON)
print()
}
else {
}
}
}
}
当我现在查看 API-Football 的 RapidApi 文档时,您不需要这些参数。您只需要从不同的部分构建 URL,然后发出 GET 请求。
class ViewController: UIViewController {
let MAIN_URL = "https://api-football-v1.p.rapidapi.com/v2/leagues/country/"
override func viewDidLoad() {
super.viewDidLoad()
getLeague(for: "england", year: 2018)
}
func getHeaders() -> [String : String] {
let headers = [
"X-RapidAPI-Host": "api-football-v1.p.rapidapi.com",
"X-RapidAPI-Key": "xxxxxxxxxxxxxxxxxxx"
]
return headers
}
func getLeague (for country : String, year: Int) {
let url = MAIN_URL + country + "/\(year)/"
Alamofire.request(url, method: .get, parameters: nil, encoding: URLEncoding.default, headers: getHeaders()).responseJSON {
response in
if response.result.isSuccess {
let leagueJSON : JSON = JSON(response.result.value!)
print(leagueJSON)
print()
}
else {
}
}
}
}