我有一个向服务器发送请求的函数。它有效。
问题: 我想在请求中传递参数。例如,client_id。此外,可以添加一些其他参数或根本不添加参数。 我该怎么做?
注意到,client_id是硬编码的(用于测试)
java.lang.StackOverflowError
}
在视图控制器上,我有这个填充tableview的功能。我必须传递一个参数:client_id。该函数也将从应用程序的其他位置调用。此外,在函数上,令牌通过GET传递给服务器。
stringx.replaceAll(/(\n.*?;(.*?);.*?;.*?;.*?;.+)(\n.*?;\2;.+)+/, '\ntitle\n$1\n$2\n')
答案 0 :(得分:0)
您需要根据这些参数构建您的URL。构建URL的最佳方法是通过URLComponents
struct:
func makeRequest<T>(endpoint: String,
parameters: [String: String],
completionHandler: @escaping (ApiContainer<T>?, Error?) -> ()) {
guard var urlComponents = URLComponents(string: endpoint) else {
print("Invalid endpoint")
return
}
// Build an array containing the parameters the user specified
var queryItems = parameters.map { key, value in URLQueryItem(name: key, value: value) }
// Optional: Add default values for parameters that the user missed
if !queryItems.contains(where: { $0.name == "token" }) {
queryItems.append(URLQueryItem(name: "token", value: "123"))
}
// Add these parameters to the URLComponents
urlComponents.queryItems = queryItems
// And here's your final URL
guard let url = urlComponents.url else {
print("Cannot construct URL")
return
}
print(url)
// ... rest of your function
}
用法:
makeRequest(endpoint: "http://blog.local:4711/api/contacts/all", parameters: ["client_id": "42", "token": "xyz"], completionHandler: completionHandler)
// http://blog.local:4711/api/contacts/all?token=xyz&client_id=42
但是如果用户错过了一些必需的参数,该函数可以为它们添加默认值:
makeRequest(endpoint: "http://blog.local:4711/api/contacts/all", parameters: [:], completionHandler: completionHandler)
// http://blog.local:4711/api/contacts/all?token=123