Ich versuche, einen universellen Fehlerhandler für meine Anwendung zu erstellen und die Sache noch komplizierter zu machen Ich verwende einen Ereignisbus, um eine Aufgabe zu übergeben, so dass ich den Typ nicht angeben kann Kompilierzeit. Ich versuche, die folgend zu tun:Schnelle Umwandlung ohne Angabe des generischen Typs
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
}
}
Option 1 gibt eine Kompilierung Fehlermeldung, dass den generischen Typ TResut die Aufgabe kann nicht geschlossen werden. Option 2 verursacht eine Fehlerlaufzeit Task<SpecificType> cannot be caster to Task<AnyObject>
Ich habe die gleiche Implementierung in Java zu sagen, wo es Sie nicht scheint, dass es den generischen Typ angeben. Task<TResult>
könnte potenziell jeder Typ sein, so dass ich es in der obigen Methode nicht angeben kann. Gibt es eine Möglichkeit, dies zu umgehen?
Leider kann ich das nicht tun, da die 'Task' in' data.object' gespeichert ist. Jetzt ist das nicht wirklich sicher, aber ich bin bereit, das Risiko einzugehen und zu versuchen, dies zu einer "Aufgabe" zu machen. Leider scheint Swift das nicht zuzulassen –
Also Option 1 (Wechsel zu einem nicht-generischen Typ) ist out. Option 2 ist es! Machen Sie Ihre universellen Error-Handler-Methoden selbst generisch, wie oben gezeigt. – andyvn22