Swift Weird Strings

时间:2016-05-26 06:21:55

标签: swift

我试图以这种方式使用NSURL字符串:

var name = "Unknown Name"
let SearchString = "http://xxx?name=\(name)"
let SearchURL = NSURL(string: SearchString)

但是,SearchURL变为零并抛出异常,因为"Unknown""Name"之间有空格

我想在name变量的开头和结尾添加单引号,但我不能这样做,因为我执行了以下操作:

let SearchString = "http://xxx?name='\(name)'"

当我在调试器中跟踪SearchString时,我发现它包含以下内容:

http://xxx?name=\'Unknown Name\' 

并再次抛出异常。

如何删除这些奇怪的反斜杠并仅使用单引号,以便我可以使用URL

2 个答案:

答案 0 :(得分:2)

听起来你需要对name中的空格进行编码。您可以使用stringByAddingPercentEncodingWithAllowedCharacters

URLQueryAllowedCharacterSet来执行此操作(并对其他特殊字符进行编码)
var name = "Unknown Name".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
...


请注意!的不安全性 - 如果stringByAddingPercentEncodingWithAllowedCharacters返回nil则会发生崩溃

答案 1 :(得分:1)

从iOS 7开始,NSString类中有一个方法stringByAddingPercentEncodingWithAllowedCharacters。该方法通过将所有不在指定集合中的字符替换为百分比编码字符来返回从接收方生成的新字符串。

var originalString = "Unknown Name"
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())
println("escapedString: \(escapedString)")

URLQueryAllowedCharacterSet包含URL查询字符串的所有允许字符。

输出:

Unknown%20Name

所以将代码更改为

var name = "Unknown Name"
var escapedName = name..stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())
let SearchString = "http://xxx?name=\(escapedName)"
let SearchURL = NSURL(string: SearchString)

应该做的伎俩