在 NSURL() 上使用 url 方案会导致 nil

Using a url scheme on NSURL() results to nil

使用的语言:Swift 2.3

Viber 的 url 发送消息的方案是 viber://forward?text=

Whatsapp 的 url 发送消息的方案是 whatsapp://send?text=

问题是 NSURL 似乎认为没有 . 的 url 不是 url,因为这段代码似乎导致 nil

let someString = "This is some kind of long string"
print(NSURL(string: "viber://forward?text=\(someString)"))

print(NSURL(string: "viber://whatsapp://send=\(someString)"))

这会生成如下所示的日志。

nil
nil

这意味着我不能使用 UIApplication.sharedApplication().openUrl(someUrl)

有些字符不能放在 URL/NSURL 中。

您必须解析 someString 才能使用此 字符串扩展名

替换这些字符

stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

例如:

var someString = "This is some kind of long string"

someString = someString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())