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
我有一个 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