7

下面的代码在 Xcode 9.2 (Swift 4.0) 中有效,但在 Xcode 9.3 (Swift 4.1) 中出错。

let dict: [String: Any] = [
    "status_code": 5,
    "status_message": "message"
]

let data = try! JSONEncoder().encode(dict)
                           // ^  generic parameter 'T' could not be inferred

我试过制作字典[String: Encodable],并使用typealias两种字典类型,结果相同。Swift 不允许您在泛型调用中指定类型,因此会产生编译器错误。这在 Swift 4.1 中应该是什么样子?

4

1 回答 1

3

字典可以编码吗?

在 Swift 4.1 中, a仅Dictionary<Key, Value>符合EncodableifKeyValueareEncodable它们自己。

Encodable(s)字典示例

[String:Int]
[String:String]
[String:Double]

Encodable(s)非字典示例

[String:Any]
[String:UIView]

那么,你怎么能解决你的问题呢?

结构

使用模型值可能是最好的解决方案

struct Status: Codable {
    let statusCode: Int
    let statusMessage: String
}

let status = Status(statusCode: 45, statusMessage: "message")
let data = try? JSONEncoder().encode(status)
于 2018-04-11T12:47:55.137 回答