我正在寻找一个String
函数,它将前缀字符串添加到现有字符串中。
我遇到的问题:有时候,我会在没有关键字 http: 的情况下从网络服务响应中获取网址字符串。
网址(网址字符串)的一般形式应为:http://www.testhost.com/pathToImage/testimage.png
但有时我从网络服务获得//www.testhost.com/pathToImage/testimage.png
。
现在,我知道我可以检查字符串中是否有前缀http:
,但如果没有,那么我需要在现有的url字符串中添加前缀。
是否有任何String(或子字符串或字符串操作)函数在我的url字符串中添加前缀?
我尝试了Apple文档:String但找不到任何帮助。
我有另一种方法是连接字符串。
这是我的代码:
var imageURLString = "//www.testhost.com/pathToImage/testimage.png"
if !imageURLString.hasPrefix("http:") {
imageURLString = "http:\(imageURLString)" // or "http:"+ imageURLString
}
print(imageURLString)
但是我可以在这里使用任何标准方式或iOS String默认功能吗?
答案 0 :(得分:7)
另一种选择是URLComponents
。这可以使用或不使用http
var urlComponents = URLComponents(string: "//www.testhost.com/pathToImage/testimage.png")!
if urlComponents.scheme == nil { urlComponents.scheme = "http" }
let imageURLString = urlComponents.url!.absoluteString
答案 1 :(得分:6)
如果"http:" + "example.com"
不适合您,您可以编写自己的扩展名来执行此操作:
extension String {
mutating func add(prefix: String) {
self = prefix + self
}
}
...或者在添加前缀之前让它测试字符串,只有在它不存在时才添加它:
extension String {
/**
Adds a given prefix to self, if the prefix itself, or another required prefix does not yet exist in self.
Omit `requiredPrefix` to check for the prefix itself.
*/
mutating func addPrefixIfNeeded(_ prefix: String, requiredPrefix: String? = nil) {
guard !self.hasPrefix(requiredPrefix ?? prefix) else { return }
self = prefix + self
}
}
用法:
// method 1
url.add(prefix: "http:")
// method 2: adds 'http:', if 'http:' is not a prefix
url.addPrefixIfNeeded("http:")
// method 2.2: adds 'http:', if 'http' is not a prefix (note the missing colon which includes to detection of 'https:'
url.addPrefixIfNeeded("http:", requiredPrefix: "http")
答案 2 :(得分:1)
没有内置任何内容,但您可以使用条件赋值在一行中执行此操作。请参阅以下内容:
imageURLString = imageURLString.hasPrefix("http:") ? imageURLString : ("http:" + imageURLString)
答案 3 :(得分:1)
我认为应该重新调整此线程以处理更多URL String Manipulation。要返回前缀字符串,您不必使用扩展名来执行此操作,而是使用更高阶函数(对于集合)
let prefix = "Mr."
self.dataSource = myMaleFriends.map({ (friend) -> String in
return prefix + " " + friend
})
var name = "Anderson"
name = name.withMutableCharacters({ (name) -> String in
return "Mr. " + name
})