Swift 4中的子字符串

时间:2019-01-10 18:43:01

标签: substring swift4

我有一个网址字符串(假)

http://fools.sayers.mine.cs/api/analytics/ces_ssn

我想创建一个新的URL字符串

http://fools.sayers.mine.cs/api/

我面临的问题是最后一个参数ces_ssn有时可以是ces_fwadv_let之类的东西,因此我无法在代码中完全设置endIndex。

有没有办法创建一个动态的函数,说每次都只给我前32个字符,与endIndex无关

4 个答案:

答案 0 :(得分:1)

您有一个URL。使用URL。假设您知道要删除路径的最后两个部分,则可以执行以下操作:

let myURL = URL(string: "http://fools.sayers.mine.cs/api/analytics/ces_ssn")!
let shortURL = myURL.deletingLastPathComponent().deletingLastPathComponent()
print(shortURL)

输出:

  

http://fools.sayers.mine.cs/api/

答案 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"