无法使用类型为([T.Type]的参数列表,来自:数据)调用“解码”

时间:2018-07-18 12:06:00

标签: ios swift decodable

我目前正在尝试制作一个解析器,该解析器将接受一个json响应,其中包含一系列字典。我已经将它用于json响应,该响应仅以以下方式保存字典

func decodeResult<T: Decodable>(model: T.Type, result: NSDictionary) -> (model: T?, error: Error?) {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: result, options: .prettyPrinted)
            let modelObject = try JSONDecoder().decode(model.self, from: jsonData)
            return (modelObject, nil)
        } catch let error {
            return (nil, error)
        }
    }

现在我正在尝试基本上做同样的事情,但要得到数组结果。到目前为止,我已经创建了这个

func decodeResult<T: Decodable>(model: T.Type, result: NSArray) -> (model: [T]?, error: Error?) {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: result, options: .prettyPrinted)
            let modelObject = try JSONDecoder().decode([model].self, from: jsonData)
            return (modelObject as? [T], nil)
        } catch let error {
            return (nil, error)
        }
    }

无论如何,它在JSONDecodercannot invoke 'decode' with an argument list of type '([T.Type], from:Data)'上给我一个错误,是否有人知道为什么会发生这种情况以及我在这里忘记了会导致此错误的原因?

如果我不使用泛型类型而这样做,而只是使用我的Chat模型(例如),它将很好地工作。

1 个答案:

答案 0 :(得分:2)

我刚刚意识到我忘记更改代码以及为什么它不起作用,所以我想在这里为遇到相同问题的任何人共享解决方案。

我忘了输入model类型的[T]输入,这就是为什么它无法解码给定模型的原因。因此,这使得整个工作代码看起来像这样

func decodeResult<T: Decodable>(model: [T].Type, result: NSArray) -> (model: [T]?, error: Error?) {
        do {
            let jsonData = try JSONSerialization.data(withJSONObject: result, options: .prettyPrinted)
            let modelObject = try JSONDecoder().decode(model.self, from: jsonData)
            return (modelObject, nil)
        } catch let error {
            return (nil, error)
        }
    }