我的应用中有一个网站文件夹。我组装了一个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中有所不同。无论哪种方式,需要改变什么才能阅读这两个文件的内容?
答案 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;
}