【发布时间】:2016-04-29 14:26:58
【问题描述】:
首先,我是 iOS 和 Swift 的新手,具有 Android/Java 编程背景。所以对我来说,在尝试写入文件时捕获异常的想法是第二天性,以防空间不足、文件权限问题或文件可能发生的其他任何事情(并且根据我的经验已经发生) .我也明白,在 Swift 中,异常与 Android/Java 不同,所以这不是我在这里要问的。
我正在尝试使用 NSFileHandle 附加到文件,如下所示:
let fileHandle: NSFileHandle? = NSFileHandle(forUpdatingAtPath: filename)
if fileHandle == nil {
//print message showing failure
} else {
let fileString = "print me to file"
let data = fileString.dataUsingEncoding(NSUTF8StringEncoding)
fileHandle?.seekToEndOfFile()
fileHandle?.writeData(data!)
}
但是,seekToEndOfFile() 和 writeData() 函数都表明它们会引发某种异常:
如果文件描述符已关闭或无效,如果接收方表示未连接的管道或套接字端点,如果文件系统上没有剩余空间,或者发生任何其他写入错误,则此方法引发异常。 -
writeData()的 Apple 文档
那么在 Swift 2.0 中处理这个问题的正确方法是什么?我已阅读链接
Error-Handling in Swift-Language、try-catch exceptions in Swift、NSFileHandle writeData: exception handling、Swift 2.0 exception handling 和 How to catch an exception in Swift,但他们都没有直接回答我的问题。我确实读过一些关于在 Swift 代码中使用 Objective-C 的内容,但是由于我是 iOS 新手,所以我不知道这种方法是什么,而且似乎在任何地方都找不到它。我还尝试了新的 Swift 2.0 do-catch 块,但他们没有认识到 NSFileHandle 方法会引发任何类型的错误,很可能是因为函数文档没有 throw 关键字。
我知道如果应用程序空间不足或其他原因,我可以让应用程序崩溃,但由于应用程序可能稍后会发布到应用程序商店,我不希望这样。那么我该如何以 Swift 2.0 的方式做到这一点呢?
编辑:目前这是一个只有 Swift 代码的项目,所以即使在 Objective-C 中似乎有一种方法可以做到这一点,但我不知道如何将两者结合起来。
【问题讨论】:
标签: ios swift swift2 nsexception nsfilehandle