Swift 4:使用 Codable `Generic parameter 'T' cannot be inferred`
Posted
技术标签:
【中文标题】Swift 4:使用 Codable `Generic parameter \'T\' cannot be inferred`【英文标题】: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)!)
我做错了什么?
【问题讨论】:
可能重复:Any when decoding JSON with Codable? 【参考方案1】:该消息具有误导性,真正的错误是obj
的类型为[String: Any]
,它不符合Codable
,因为Any
不符合。
仔细想想,Any
永远不会符合Codable
。当 JSON 实体可以是整数、字符串或对象时,Swift 将使用什么来存储它?您应该定义一个适当的结构来保存您的数据。
【讨论】:
谢谢。有没有办法使 [String : [String: Any]] 可编码?Any
永远不能符合Codable
。您应该定义一个适当的结构来保存您的数据以上是关于Swift 4:使用 Codable `Generic parameter 'T' cannot be inferred`的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 9.3(Swift 4.1)中的 Codable '没有初始化器'
如何在 Core Data 中使用 swift 4 Codable?
如何在 Core Data 中使用 swift 4 Codable?