作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Swift 3 中,RecoverableError protocol被介绍了,但是这里很少有关于如何使用它的文档。
这听起来像是为失败的进程提供重试功能的 native 方式,这可能非常有用。什么是如何使用它的示例?
最佳答案
您可以使用的一件事RecoverableError
是 macOS 的基于文档的应用程序。
RecoverableError
的错误类型.enum MyError {
case documentSavingError
//...
}
extension MyError: RecoverableError {
var recoveryOptions: [String] {
return [
"Retry", "Ignore"
]
}
func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool {
if recoveryOptionIndex == 0 {//for "Retry"
var result = false
switch self {
case .documentSavingError:
//Attempt "Retry" recovery for the failed operation, and return the result
//...
print("assume recovery attempt successfully finished...")
result = true
//...
}
return result
} else if recoveryOptionIndex == 1 {//for "Ignore"
return true
}
fatalError("something wrong...")
}
}
data(ofType:)
Document.swift 中的方法抛出错误。override func data(ofType typeName: String) throws -> Data {
//throw RecoverableError
throw MyError.documentSavingError
}
NSApplication
.import AppKit
@objc(Application)
class Application: NSApplication {
override func presentError(_ error: Error, modalFor window: NSWindow, delegate: Any?, didPresent didPresentSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
//print(error)
let underlyingError = (error as NSError).userInfo[NSUnderlyingErrorKey] as? Error ?? error
//print(underlyingError)
super.presentError(underlyingError, modalFor: window, delegate: delegate, didPresent: didPresentSelector, contextInfo: contextInfo)
}
}
RecoverableError
在平常 NSError
,所以,没有这个,自动生成 NSDocumentErrorRecoveryAttempter
效果不佳。RecoverableError
正在工作... RecoverableError
当您的应用程序已经实现了
Error Handling Programming Guide 中描述的标准恢复功能时非常有用。 .它的介绍清楚地说明了:
Important: The
NSError
class is available on both OS X and iOS. However, the error-responder and error-recovery APIs and mechanisms are available only in the Application Kit (OS X).
关于error-handling - 如何使用 RecoverableError 重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352975/
在 Swift 3 中,RecoverableError protocol被介绍了,但是这里很少有关于如何使用它的文档。 这听起来像是为失败的进程提供重试功能的 native 方式,这可能非常有用。什
我是一名优秀的程序员,十分优秀!