Swift 3ではRecoverableError protocolが導入されましたが、これを使用する方法についてはほとんどドキュメントがありません。RecoverableErrorを使用して再試行するにはどうすればよいですか?
これはかなり有用である可能性失敗したプロセス、再試行機能を提供するネイティブな方法のように聞こえます。どのようにこれを使うことができるのか?あなたがRecoverableError
を利用することができ
Swift 3ではRecoverableError protocolが導入されましたが、これを使用する方法についてはほとんどドキュメントがありません。RecoverableErrorを使用して再試行するにはどうすればよいですか?
これはかなり有用である可能性失敗したプロセス、再試行機能を提供するネイティブな方法のように聞こえます。どのようにこれを使うことができるのか?あなたがRecoverableError
を利用することができ
ことの一つは、MacOSのためのドキュメントベースのアプリケーションです。
新しいプロジェクト「macOS> Cocoa」を作成し、「ドキュメントベースのアプリケーションの作成」を選択します。
は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...")
}
}
エラーをスローするようDocument.swiftでdata(ofType:)
方法を変更します。
override func data(ofType typeName: String) throws -> Data {
//throw RecoverableError
throw MyError.documentSavingError
}
あなたはNSApplication
をサブクラス化するための新しい迅速なコードを作成し、現在のドキュメントベースのアプリケーション内の1つの以上のトリック...
を必要としています。
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)
}
}
現在のドキュメントベースのアプリケーションのラップはこのなしで、自動的に生成さNSDocumentErrorRecoveryAttempter
がうまく動作しない、通常のNSError
でRecoverableError
を投げ、そう。
は、その主要なクラスとしてこのクラスを指定するInfo.plistファイルを変更することを忘れないでください。
ビルドおよびドキュメントウィンドウが提示されたときに、アプリを実行し、[ファイル]> [保存...、および保存シートで[保存]をクリックします。既にアプリでError Handling Programming Guideに記載された標準的な回復機能を実装したときに
あなたのRecoverableError
だから...
を働いている方法を見つけることができ、RecoverableError
に便利です。その導入がはっきり言う:
重要:
NSError
クラスには、OS XとiOSの両方で利用可能です。ただし、error-responder APIとエラー回復APIとメカニズム は、Application Kit(OS X)でのみ使用できます。
いいえ、この頭の先頭に感謝:) – TruMan1
この質問は報奨金のためにnow..Thinkingまでかなりuseful..But何の答えをされていませんか? –
いいアイデアは、この謎は宝石のように思えます。 – TruMan1
あなたがいなかったら、私は貢献することを考えていた:) –