Swift:在字符串中添加前缀(字符串)

时间:2018-01-10 13:32:01

标签: ios swift string url prefix

我正在寻找一个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默认功能吗?

4 个答案:

答案 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
})