Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用struct构建端点_Swift_Url_Struct - Fatal编程技术网

Swift 使用struct构建端点

Swift 使用struct构建端点,swift,url,struct,Swift,Url,Struct,我正在构建一个带有常量的struct,以形成URL端点 struct Constants { struct Api { static let BaseUrl = "http://srv.com/ws_rest/" static let LoginPassword1 = "credentials?member_account_pwd=" static let LoginUsername2 = "&member_account_logi

我正在构建一个带有常量的
struct
,以形成
URL
端点

struct Constants {
    struct Api {
        static let BaseUrl = "http://srv.com/ws_rest/"
        static let LoginPassword1 = "credentials?member_account_pwd="
        static let LoginUsername2 = "&member_account_login="
        static let Login3 = "&channelId=4"
    }
}
最终结果是:

let url = URL.baseUrlWith(string: Constants.Api.LoginPassword1 + "pass" + Constants.Api.LoginUsername2 + "user" + Constants.Api.Login3)

这仅适用于一个端点。有人知道更好的实用方法吗?

有一个函数可以帮助您

    func urlString(with baseURL: String, and parameters: [String: String])->String {
        var mutableBaseURL = baseURL
        for (i, param) in parameters.enumerated() {
            var symbol = "&"
            if i == 0 { symbol = "?" }

            mutableBaseURL += "\(symbol)\(param.key)=\(param.value)"
        }
        return mutableBaseURL
    }
所以你的常数会变成

struct Constants {
    struct Endpoints {
        static let login = "http://srv.com/ws_rest/credentials"
    }

    struct Parameters {
        static let username = "member_account_login"
        static let password = "member_account_pwd"
        static let channelId = "channelId"
    }
}
在代码的某个地方,您将拥有

let url = urlString(with: Constants.Endpoints.login, and: [
                Constants.Parameters.username: username,
                Constants.Parameters.password: pass, 
                Constants.Parameters.channelId: "4"
            ])

希望有帮助。

这就是我命名静态变量的方式。我想没关系。