Swift Strings和NSString初始化器

时间:2014-10-15 19:10:16

标签: string swift nsstring

  

“......你几乎不需要直接使用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中有另一种首选方法吗?

2 个答案:

答案 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初始化程序中使用,后者本身返回一个可选项。编译器可能以一种典型的迟钝方式抱怨这一点。

相关问题