在iOS Swift2中读取本地HTML文件

时间:2015-10-05 00:17:46

标签: ios swift2

我的应用中有一个网站文件夹。我组装了一个HTML字符串并将其加载到webview中。在此过程中,我尝试加载两个文件时遇到错误。

let hpath: String = "site/header.html"
let fpath: String = "site/footer.html"
let head: String = String(contentsOfFile: hPath, encoding: NSUTF8StringEncoding, error: nil)
let foot: String = String(contentsOfFile: fPath, encoding: NSUTF8StringEncoding, error: nil)
return head + foot

错误:

  

无法为类型'字符串'调用初始值设定项使用类型'的参数列表(contentsOfFile:String,encoding:UInt,error:NilLiteralConvertible)'

我的来源与我找到的例子相同。也许它现在在Swift 2中有所不同。无论哪种方式,需要改变什么才能阅读这两个文件的内容?

2 个答案:

答案 0 :(得分:2)

Swift 2中的错误处理已更改。如果需要在运行时处理错误并需要错误消息:

var head: String
do {
    head = try String(contentsOfFile: hPath, encoding: NSUTF8StringEncoding)
}
catch let error as NSError { fatalError(error.localizedDescription) // or do something else with the error}

如果您知道该文件将在运行时存在(例如在应用程序包中):

let foot: String = try! String(contentsOfFile: fPath, encoding: NSUTF8StringEncoding)

如果文件不存在,上述内容将会崩溃。

第三种选择:

let foot: String? = try? String(contentsOfFile: fPath, encoding: NSUTF8StringEncoding)

如果该文件不存在,则不会崩溃,但会返回一个可选字符串,并且没有错误消息。

答案 1 :(得分:1)

这就是我能够从我添加到项目中的目录中读取几个文件的方法。我将一个HTML主体传递给一个方法,然后用一个存储在应用程序文件系统中的页眉和页脚来包装它。

func assembleHTML(var html: String) -> String {
    let fileMgr = NSFileManager.defaultManager()
    let hPath = NSBundle.mainBundle().pathForResource("site/header", ofType: "html")!
    let fPath = NSBundle.mainBundle().pathForResource("site/footer", ofType: "html")!
    var hContent: String?
    var fContent: String?
    if fileMgr.fileExistsAtPath(hPath) && fileMgr.fileExistsAtPath(fPath) {
        do {
            hContent = try String(contentsOfFile: hPath, encoding: NSUTF8StringEncoding)
            fContent = try String(contentsOfFile: fPath, encoding: NSUTF8StringEncoding)
        } catch let error as NSError {
            print("error:\(error)")
        }
    } else {
        print("not found")
    }
    html = hContent! + html + fContent!
    return html;
}