【问题标题】:Swift 4: With Codable `Generic parameter 'T' could not be inferred`Swift 4:使用 Codable `Generic parameter 'T' cannot be inferred`
【发布时间】:2018-09-02 17:24:11
【问题描述】:

我收到以下错误:

Generic parameter 'T' could not be inferred

在线:let data = try encoder.encode(obj)

这里是代码

import Foundation

struct User: Codable {
    var firstName: String
    var lastName: String
}

let u1 = User(firstName: "Ann", lastName: "A")
let u2 = User(firstName: "Ben", lastName: "B")
let u3 = User(firstName: "Charlie", lastName: "C")
let u4 = User(firstName: "David", lastName: "D")

let a = [u1, u2, u3, u4]

var ret = [[String: Any]]()
for i in 0..<a.count {
        let param = [
            "a" : a[i],
            "b" : 45
            ] as [String : Any]
    ret.append(param)
}


let obj = ["obj": ret]

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(obj) // This line produces an error
print(String(data: data, encoding: .utf8)!)

我做错了什么?

【问题讨论】:

标签: swift swift4 xcode9 encoder codable


【解决方案1】:

该消息具有误导性,真正的错误是obj 的类型为[String: Any],它不符合Codable,因为Any 不符合。

仔细想想,Any 永远不会符合Codable。当 JSON 实体可以是整数、字符串或对象时,Swift 将使用什么来存储它?您应该定义一个适当的结构来保存您的数据。

【讨论】:

  • 谢谢。有没有办法使 [String : [String: Any]] 可编码?
  • Any 永远不能符合Codable。您应该定义一个适当的结构来保存您的数据
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2018-09-07
  • 2017-11-11
相关资源
最近更新 更多