Cast NSString(contentsOfURL:…) to String?

99封情书 提交于 2019-12-13 06:01:08

问题


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!) }
}

Swift is version 1.2, error message is:

NSString? is not convertible to string


回答1:


With Swift 1.2 automatic bridging between String and NSString has been removed.

So you have to explicitly do the cast :

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




回答2:


Swift's String accepts this same initializer as NSString, so you don't even have to use NSString nor to typecast:

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

Update for Swift 2.0

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

You can also use an Optional with try? if you want, in this case no need for do catch:

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



回答3:


In Swift 3 I am using the following

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


来源:https://stackoverflow.com/questions/32263893/cast-nsstringcontentsofurl-to-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!