试用
试用允许您使用 Swift 错误处理来处理 Objective-C 的异常。Objective-C 中有许多 API 可以抛出在 Swift 中无法处理的异常。例如,NSKeyedUnarchiver 如果尝试将值转换为不兼容的类型,会抛出异常。
以下示例中,我们将解密一个由 `NSKeyedArchiver
` 编写的 `int
`。如果这些数据实际编码为 `float
`,则 `decodeIntForKey(_:)
` 方法通常会抛出异常,但使用 Trust 它抛出了一个 Swift 错误,并且我们可以优雅地处理它。该方法将以更 Swift 友好的方式处理错误,通过返回 `nil
`。
func decodeCountFromData(data: Data) -> Int? {
let archiver = NSKeyedUnarchiver(forReadingWith: data)
defer { archiver.finishDecoding() }
do {
try trap {
return archiver.decodeInteger(forKey: "count")
}
} catch let error as NSError {
if let exception = error.userInfo[tryExceptionErrorKey] as? NSException {
dlog("ERROR: Exception decoding count: \(exception)")
} else {
dlog("ERROR: Unknown decoding error: \(error)")
}
return nil
}
}
贡献者
该概念和原始实现由 Jacob Berkman 完成。