比较Handling Error Objects Returned From Methods
在《错误处理编程指南》中:
重要提示:成功或失败由
方法。虽然 Cocoa 方法间接返回错误对象
Cocoa 错误域保证返回这样的对象,如果
方法直接返回 nil 或 NO 表示失败,你应该
在尝试之前总是检查返回值是 nil 还是 NO
对 NSError 对象做任何事情。
所以对于 Cocoa/Cocoa Touch 方法,您应该始终检查返回
价值第一。保证error != nil如果方法失败,
但如果方法成功,则不明确保证error == nil。
例子:
JSON 序列化
var error : NSError?
if let jsonObj = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) {
// success
} else {
// failure
println("Invalid JSON data: \(error!.localizedDescription)")
}
核心数据获取请求
var error : NSError?
if let result = context.executeFetchRequest(request, error: &error) {
// success, result has zero or more elements
} else {
// failure
println("Fetch failed: \(error!.localizedDescription)")
}
复制文件
var error : NSError?
if !NSFileManager.defaultManager().copyItemAtPath(srcPath, toPath: dstPath, error: &error) {
println("Cannot copy file: \(error!.localizedDescription)")
}
当然你可以为你自己的函数定义你自己的规则,
但我会遵循相同的 Apple 准则。
更新:从 Swift 2 开始, 产生错误的 Cocoa 方法是
翻译成抛出错误的 Swift 函数,并且这个错误
必须用try-catch处理。这是 Swift 2 版本
以上例子:
JSON 序列化
do {
let jsonObj = try NSJSONSerialization.JSONObjectWithData(jsonData, options: [])
// success
} catch let error as NSError {
// failure
print("Invalid JSON data: \(error.localizedDescription)")
}
核心数据获取请求
do {
let result = try context.executeFetchRequest(request)
// success, result has zero or more elements
} catch let error as NSError {
// failure
print("Fetch failed: \(error.localizedDescription)")
}
复制文件
do {
try NSFileManager.defaultManager().copyItemAtPath(srcPath, toPath: dstPath)
} catch let error as NSError {
print("Cannot copy file: \(error.localizedDescription)")
}