swift - 如何将字符串转换为包含 ? 在 Swift 4.2 的字符串中
问题描述
如题,我使用的是Google Places API,URL有问号,当我发送请求时,它会变成%3F,如何通过Swift 4.2修改我的代码??
我找到了很多信息,但他们使用的是 Swift 2 或 3,所以我无法使用!
更新我的代码
let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(GMS_HTTP_KEY)&input=\(keyword)&sessiontoken=\(ver4uuid!)"
print(urlString)
if let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics
.union(CharacterSet.urlPathAllowed)
.union(CharacterSet.urlHostAllowed)) {
print("encodedString: \(encodedString)")
解决方案
您应该只编码查询参数(尽管keyword
实际上可能只需要编码),而不是整个 URL。
func urlEncode(_ string: String) -> String {
var allowed = CharacterSet.urlQueryAllowed
allowed.remove(charactersIn: "!*'();:@&=+$,/?%#[]")
return string.addingPercentEncoding(withAllowedCharacters: allowed) ?? ""
)
let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(urlEncode(GMS_HTTP_KEY))&input=\(urlEncode(keyword))&sessiontoken=\(urlEncode(ver4uuid!))"
print(urlString)
另请参阅Swift - 对 URL进行编码以了解对 URL 参数进行编码的正确方法。
推荐阅读
- xslt - xslt2.0: identity transformation with conditional change
- android - ADAL 能否与 AD FS 而不是 Azure AD 一起使用?
- r - R - 自动将时间序列分成相等的部分
- python - 如何读取包含括号中坐标的用户输入
- python - 如何打印面板的次要索引?
- wordpress - 有没有办法在用户登录时只显示单个产品的库存
- css - 尝试使用 CSS (flexbox) 垂直对齐文本
- android - Viewpager 适配器在 instantiateItem 处同时加载位置 0 和 1
- spring - Spring boot - 如何使用 2 个身份验证提供程序
- angular - 使用 FilterPredicate 创建自定义过滤器来过滤 DataSource