我必須構造這樣的 URL “myapi?category=69&filters[pa_ram]=83,84&filters[pa_storage]=79”
我嘗試首先使用 URLQueryItem 和 URLComponents 在 Playground 中構建
func callApi(categoryID: String, paramName: String, paramVal: String) {
let queryItems = [URLQueryItem(name: "category", value: categoryID), URLQueryItem(name: "filters[\(paramName)]", value: paramVal)]
var urlComps = URLComponents(string: "myapi")!
urlComps.queryItems = queryItems
let result = urlComps.url!
print(result)
}
callApi(categoryID: "69", paramName: "pa_ram", paramVal: "84")
但是我得到了錯誤的 URL "myapi?category=69&filters[pa_ram]=84" 并且也無法理解我應該如何使用重復查詢鍵構建 API。我將不勝感激任何幫助。
uj5u.com熱心網友回復:
為了支持多個過濾器,我將使用 Dictionary 來將過濾器引數傳遞給函式
func callApi(categoryID: String, parameters: [String: String]) -> URL {
var queryItems = [URLQueryItem(name: "category", value: categoryID)]
for parameter in parameters {
queryItems.append(URLQueryItem(name: "filters[\(parameter.key)]", value: parameter.value))
}
var urlComps = URLComponents(string: "myapi")!
urlComps.queryItems = queryItems
return urlComps.url!
}
請注意,字典是無序的,因此如果順序很重要,您可以改用自定義結構并傳遞它的陣列。
要使用括號,我只需搜索和替換 url 字串
let url = callApi(categoryID: "69", parameters: ["pa_ram": "84", "pa_storage": "79"])
let fixed = url.absoluteString
.replacingOccurrences(of: "[", with: "[")
.replacingOccurrences(of: "]", with: "]")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/442988.html
