swift - 删除现有字符串并为该字符串附加一个新字符串
问题描述
我有一个像这样的视频网址
urldomain.com/livestream_id/PLAYER_WIDTH&PLAYER_HEIGHT&IDFA_ID&DEVICE_ID
如果视频 URL 包含PLAYER_WIDTH&PLAYER_HEIGHT
所以我必须用 this 替换这个字符串&sd=1960*1080
,如果它不包含IDFA_ID
所以我必须从 URL 中删除它,如果它包含DEVICE_ID
所以我必须用这个替换 DEVICE_ID device_id="myDeviceid"
。
所以我的最终到达网址看起来像这样
urldomain.com/livestream_id/?sd=1960*1080&deviceId="myDeviceid"
谁能告诉我我该怎么做。
解决方案
无需替换字符串中的子字符串。您应该使用URLComponents
来撰写您的URL
. 这样您就不必手动对字符串进行百分比编码。
var components = URLComponents()
let scheme = "https"
let host = "urldomain.com"
let path = "/livestream_id/"
let sd = "1960*1080"
let deviceId = "myDeviceid"
let sdItem = URLQueryItem(name: "sd", value: sd)
let deviceIdItem = URLQueryItem(name: "device_id", value: deviceId)
components.scheme = scheme
components.host = host
components.path = path
components.queryItems = [sdItem, deviceIdItem]
if let url = components.url {
print(url.absoluteString) // https://urldomain.com/livestream_id/?sd=1960*1080&device_id=myDeviceid
}
要自定义最终 url,您可以检查您的字符串是否包含关键字,如果为真,只需将查询项附加到组件的 queryItem 属性。就像是:
let urlString = "urldomain.com/livestream_id/PLAYER_WIDTH&PLAYER_HEIGHT&IDFA_ID&DEVICE_ID"
components.queryItems = []
if urlString.contains("PLAYER_WIDTH&PLAYER_HEIGHT") {
components.queryItems?.append(sdItem)
}
if urlString.contains("DEVICE_ID") {
components.queryItems?.append(deviceIdItem)
}
推荐阅读
- java - 如何在 jenkinsfile 中将参数传递给 sbt
- javascript - 为什么 splice 方法只删除 React 中的第一个数组索引?
- c# - Asp.Net Core 3(Blazor 客户端)的构建失败
- react-native - 如何突出显示平面列表中的项目并显示删除选项以在长按该项目时从列表中删除该项目?
- android - 如何创建android服务来检查用户是否打开另一个应用程序
- javascript - 为变量分配新值会从内存中清除旧值?
- javascript - 数据表中的舍入列页脚
- git - 恢复已删除的有一些更改的 git 文件
- c++ - 排序比较器,专业化
- sql - 如果行存在于另一个表中,如何更新 (SQL)