2015-08-28 91 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來這裏的錯在編輯代碼時,我以任何方式刪除它,並且它可以工作。 –