首页 > 解决方案 > 映射来自不同文件的 API url Swift 4 (ALAMOFIRE)

问题描述

我在 Swift 中还是新手,我有一个与 api URL 相关的问题。我有 API URL 列表,我将其放置在一个单独的类中,即类 ServerApi。原因是,如果需要,我更容易更改 URL,因为它已经放在一个文件中。代码如下:

class ServerApi {

private static let BASE_URL = "http://myurl";

static var API_LOGIN = BASE_URL + "/auth/local";
static var API_SIGNUP = BASE_URL + "/auth/local/register"
static var API_PLACE = BASE_URL + "/place"
static var API_ONE_PLACE = BASE_URL + "/place/%s"
static var API_IMAGE = BASE_URL + "/%s"

private static let URL_PATH = "http://myurl2";

static var URL_CREATE_WALLET = URL_PATH + "/wallet";
static var URL_RELOAD_WALLET = URL_PATH + "/wallet/%s/reload";
static var URL_PAYMENT = URL_PATH + "/wallet/%s/payment";
static var URL_WALLET_ACCOUNT = URL_PATH + "/wallet/%s";
static var URL_USER_TRANSACTION = URL_PATH + "/wallet/%s/transactions";
static var URL_ORDER = URL_PATH + "/orders";
static var URL_CABINET = URL_PATH + "/cabinets/%s";
static var URL_CREATE_PAYMENT = URL_PATH + "/payments";
static var URL_IMAGE = URL_PATH + "/payments";

} 

%s实际上代表用户ID,它可以根据用户进行更改。我只是声明为 %s,因为我不知道它实际上应该是什么。我使用 Alamofire 返回数据。下面是我调用 URL 中不需要的 URL 的示例user_id之一%s

        Alamofire.request(ServerApi.API_LOGIN, method: .post, parameters: parameters, encoding: URLEncoding.default).validate(statusCode: 200..<300).responseJSON { response in


        if (response.result.isSuccess){

            if let value = response.result.value {
                print(value)

                Helper.helper.switchToViewController(Navigation: "mainVC")

                let dataObject:Dictionary = value as! Dictionary<String, Any>
                print(dataObject)

                let balanceObject:String = dataObject["jwt"] as! String
                print ("balance object of jwt is : \(balanceObject)")
                UserDefaults.standard.setValue(value: balanceObject, key: "jwt")

                print(UserDefaults.standard.getValue(key: "jwt"))

            } else {}

所以,如果我想调用URL_WALLET_ACCOUNT它需要user_id (%s)完成 url 的地方。我不知道如何从 url 替换 %s。下面是我分离 URL 列表之前的代码

 let user_id = "123456"
 func viewBalance() {

    Alamofire.request ("http://myurl2/wallet/\(user_id)").responseJSON { response in
        print (response)
        if let balanceJSON = response.result.value {

            let dataObject:Dictionary = balanceJSON as! Dictionary<String, Any>
            print(dataObject)

            let balanceObject:Dictionary = dataObject["data"] as! Dictionary<String, Any>
            let balance:String = balanceObject["account_balance_display"] as! String
            let newBalance = balance.dropFirst(2)
            self.balanceLabel.text = "\(newBalance)"
        }
    }
}

标签: swiftapialamofire

解决方案


推荐阅读