簡體   English   中英

Swift 4.2:類型“ T”不符合協議“可解碼”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM