我有一个网址字符串(假)
http://fools.sayers.mine.cs/api/analytics/ces_ssn
我想创建一个新的URL字符串
http://fools.sayers.mine.cs/api/
我面临的问题是最后一个参数ces_ssn
有时可以是ces_fw
或adv_let
之类的东西,因此我无法在代码中完全设置endIndex。
有没有办法创建一个动态的函数,说每次都只给我前32个字符,与endIndex无关
答案 0 :(得分:1)
您有一个URL。使用URL
。假设您知道要删除路径的最后两个部分,则可以执行以下操作:
let myURL = URL(string: "http://fools.sayers.mine.cs/api/analytics/ces_ssn")!
let shortURL = myURL.deletingLastPathComponent().deletingLastPathComponent()
print(shortURL)
输出:
答案 1 :(得分:0)
您可以使用prefix()
"http://fools.sayers.mine.cs/api/analytics/ces_ssn".prefix(32)
答案 2 :(得分:0)
这适用于 Swift 4
var url = "http://fools.sayers.mine.cs/api/analytics/ces_ssn"
let newStr = url.prefix(32)
或者可能是完美的方式
if let index = url.range(of: "api/")?.upperBound {
let api = url.prefix(upTo: index)
}
答案 3 :(得分:-1)
例如,如果您的网址突然是https
而不是http
,这听起来很容易出错。
相反,我会这样做:
let url = URL(string: "http://fools.sayers.mine.cs/api/analytics/ces_ssn")!
let components = url.pathComponents
let scheme = url.scheme!
let host = url.host!
let slash = components.removeFirst()
print (components) // ["api", "analytics", "ces_ssn"]
您感兴趣的组件就是0和1组件,您可以像这样重构URL:
let newURL = "\(scheme)://\(host)/\(components[0])/\(components[1])"
print (newURL) // "http://fools.sayers.mine.cs/api/analytics"