无法使用 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 {

            }
        }
    }
}