[英]Swift 4.2 : Type 'T' does not conform to protocol 'Decodable'
我有一個函數,該函數調用URL以JSON形式接收數據。 要將JSON解碼為自定義類,請使用JSONDecoder。
fileprivate func loadFlux<T>(_ typeClass: T.Type, urlCriteria url: String) -> Promise<Any> {
var dataFlux: [T]? = nil
var promise: Promise<Any>? = nil
...
let jsonData: Data = try! JSONSerialization.data(withJSONObject: data as! NSArray)
let decoder = JSONDecoder()
dataFlux = try decoder.decode([T], from: data)
...
}
在安裝最新版本的Xcode和swift 4.2之前,代碼構建沒有任何問題。
但是現在我Type 'T' does not conform to protocol 'Decodable'
以下錯誤消息: Type 'T' does not conform to protocol 'Decodable'
:
dataFlux = try decoder.decode([T], from: data)
我試圖搜索該消息,但目前未成功。 有解決這個問題的建議嗎?
該代碼甚至無法在以前的Swift版本上進行編譯,因為JSONDecoder.decode
期望其輸入參數符合Decodable
並且您沒有設置類型約束。 您只需要將T
限制為Decodable
。
fileprivate func loadFlux<T:Decodable>(_ typeClass: T.Type, urlCriteria url: String) -> Promise<Any> {
var dataFlux: [T]? = nil
var promise: Promise<Any>? = nil
...
let jsonData: Data = try! JSONSerialization.data(withJSONObject: data as! NSArray)
let decoder = JSONDecoder()
dataFlux = try decoder.decode([T].self, from: jsonData)
...
}
沒有完整的上下文,我無法確定您要從函數中返回什么,但是從泛型函數返回Promise<Any>
絕對是個壞主意。 您應該使函數的返回類型也通用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.