我正在嘗試爲我的應用程序創建一個通用錯誤處理程序,並使事情變得更加複雜我正在使用事件總線來傳遞任務,因此我無法指定類型編譯時間。我試圖做到以下幾點:沒有指定泛型類型的Swift類型轉換
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
}
}
選項1給出了一個編譯時錯誤說泛型類型任務的TResut無法推斷。 選項2導致運行時錯誤說Task<SpecificType> cannot be caster to Task<AnyObject>
我在Java中相同的實現它似乎你並不需要有指定泛型類型。 Task<TResult>
可能是任何類型,所以我不能在上面的方法中指定它。有什麼辦法可以解決這個問題嗎?
不幸的是我不能這樣做,因爲'任務'存儲在'data.object'中。現在這不是一件真正安全的事情,但我願意冒這個風險,並嘗試將其轉換爲「任務」。不幸的是,似乎斯威夫特是不允許的 –
因此,選項1(改爲非泛型)已經結束。選項2是!如上所示,使您的通用錯誤處理程序方法具有通用性。 – andyvn22