首页 > 解决方案 > 删除现有字符串并为该字符串附加一个新字符串

问题描述

我有一个像这样的视频网址

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"

谁能告诉我我该怎么做。

标签: swiftstringswift3uikit

解决方案


无需替换字符串中的子字符串。您应该使用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)
}

推荐阅读