私はアプリケーションの汎用エラーハンドラを作成しようとしています。さらに複雑になりました。イベントバスを使ってタスクを渡していますので、タイプを指定できません。コンパイル時。 1タスクのジェネリック型TResutを言って、コンパイル時にエラーが推測できない与えジェネリック型を指定しないでスローキャスト
let apiTask = data.object as! Task // Option 1
let apiTask = data.object as! Task<AnyObject> // Option 2
apiTask!.continueWith { (task) in
if(task.cancelled || task.faulted) {
self.isInError = true
} else {
self.isInError = false
}
}
オプション:私は、次の操作を実行しようとしています。 オプション2は、私はあなたがそこにジェネリック型を指定する必要はありませんようで、Javaで同じ実装を持ってTask<SpecificType> cannot be caster to Task<AnyObject>
言って、ランタイムエラーが発生します。 Task<TResult>
は潜在的にどのようなタイプでもかまいませんので、上記の方法では指定できません。これを回避する方法はありますか?
残念ながら、 'Task'が' data.object'に格納されているので、私はそれを行うことができません。今これは本当に安全なことではありませんが、リスクを抱えてこれを「仕事」に投げかけようとしています。悲しいことに、スウィフトはそれを許可していないようだ –
オプション1(非ジェネリックタイプに変更)が出ている。オプション2です!上記のように、汎用エラーハンドラメソッド自体を一般的なものにします。 – andyvn22