2015-08-28 88 views
0
public convenience init(nsurl:NSURL) { 
    var enc:NSStringEncoding = NSUTF8StringEncoding 
    var err:NSError? 
    let str:String? = 
    NSString(
     contentsOfURL:nsurl, usedEncoding:&enc, error:&err 
    ) 
    if err != nil { self.init(err!) } 
    else { self.init(string:str!) } 
} 

夫特是1.2版,错误信息是:将NSString(contentsOfURL:...)转换为字符串?

的NSString?不可转换为字符串

回答

1

使用Swift 1.2自动桥接字符串和NSString之间的关系已被删除。

所以,你必须明确地做演员:

let str = NSString(contentsOfURL:nsurl, usedEncoding:&enc, error:&err) as? String

1

斯威夫特的字符串接受此相同的初始化为NSString的,所以你甚至不必使用的NSString也不强制转换:

let str = String(contentsOfURL: nsurl, encoding: enc, error: &err) 

更新雨燕2.0

do { 
    let str = try String(contentsOfURL: nsurl, encoding: enc) 
    print(str) 
} catch { 
    print(error) 
} 

您还可以,如果你想使用一个可选带try?,在这种情况下没有必要do catch

if let str = try? String(contentsOfURL: nsurl, encoding: enc) { 
    print(str) 
} else { 
    // didn't succeed 
} 
0

在斯威夫特3我使用以下

do{ 
    let str = try String(contentsOf:personUrl!) 
    print(str) 
}catch let error{ 
    print(error) 
} 
+0

叶,VAR来这里的错在编辑代码时,我以任何方式删除它,并且它可以工作。 –