“......你几乎不需要直接使用NSString类 你自己的代码“
摘自:Apple Inc.“将Swift与Cocoa和Objective-C结合使用。” iBooks的。 https://itun.es/us/1u3-0.l
尽管有这个大胆的声明,但我认为我发现了需要NSString的情况。例如,请考虑以下代码块:
NSString(
contentsOfURL: NSURL(string: "http://api.stackexchange.com/answers?site=stackoverflow"),
encoding: NSUTF8StringEncoding,
error: &error)
我不能用Swift字符串做到这一点,对吧?无论哪种方式,这都不起作用:
String(
contentsOfURL: NSURL(string: "http://api.stackexchange.com/answers?site=stackoverflow"),
encoding: NSUTF8StringEncoding,
error: &error) //Compiler error
那么我应该在这里使用NSString吗?或者在Swift中有另一种首选方法吗?
答案 0 :(得分:1)
不同之处在于,使用String
NSURL不能为零,但NSURL(...)
的返回是可选的 - 您需要打开它:
var error: NSError? = nil
String(
contentsOfURL: NSURL(string: "http://api.stackexchange.com/answers?site=stackoverflow")!,
// NB ! after NSURL(...)
encoding: NSUTF8StringEncoding,
error: &error)
或者更明确地(并且正确地):
var error: NSError? = nil
if let url = NSURL(string: "http://api.stackexchange.com/answers?site=stackoverflow") {
String(
contentsOfURL: url,
encoding: NSUTF8StringEncoding,
error: &error)
}
答案 1 :(得分:0)
Foundation框架将Swift原生String
类型扩展为与NSString
具有相同的初始值设定项,因此文档 正确。 (谢谢, newacct 。)
var error: NSError?
let urlString: String? = String(
contentsOfURL: NSURL(string: "http://api.stackexchange.com/answers?site=stackoverflow")!,
encoding: NSUTF8StringEncoding,
error: &error)
只需确保观察您的选项 - NSURL
的初始值设定项返回一个需要解包的可选项,以便在NSString
初始化程序中使用,后者本身返回一个可选项。编译器可能以一种典型的迟钝方式抱怨这一点。