Swift 编码自定义字符串以填充 URL

Swift Encode Custom String to populate URL

我有一个 URL 可以接受任何 String 像这样:

https://test@api.search?query=\(productSearchString)&limit=1

现在我的问题是,这适用于例如“iphone”,但它与“iphone 12”一起崩溃。 我试过这样编码:

guard let escapedResourceString = resourceString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return  }

但这在我的情况下似乎不起作用,因为它返回了一个不正确的 URL,我无法将其与我的 API.

一起使用

我该如何解决这个问题,以便用户可以输入他想要的任何内容,但应该创建 URL 并且我的 API 应该能够使用它。

如果您还需要什么,请告诉我。

您的参数需要 url 编码。

您可以使用 URLComponents 创建您的 URL 并将参数作为 URLQueryItem 实例传递,例如:

let productSearchString = "iphone 12"
var urlComponents = URLComponents(string: "https://test@api.search")
urlComponents?.queryItems = [
    URLQueryItem(name: "query", value: productSearchString),
    URLQueryItem(name: "limit", value: "1")
]
let url = urlComponents?.url

print(url?.absoluteString ?? "nil") // https://test@api.search?query=iphone%2012&limit=1