【发布时间】:2018-03-17 16:19:45
【问题描述】:
当要解码的类型仅在运行时知道时,Swift 4 中的Decodable 协议是否可以解码 JSON 对象?
我有一个注册表,它将String 标识符映射到我们要解码的类型,如下所示:
import Foundation
struct Person: Decodable {
let forename: String
let surname: String
}
struct Company: Decodable {
let officeCount: Int
let people: [Person]
}
let registry: [String:Decodable.Type] = [
"Person": Person.self,
"Company": Company.self
]
let exampleJSON = """
{
"forename": "Bob",
"surname": "Jones"
}
""".data(using: .utf8)!
let t = registry["Person"]!
try! JSONDecoder().decode(t, from: exampleJSON) // doesn't work :-(
我是在正确的路线上还是有更好的方法?
【问题讨论】:
-
你应该通过
Person.self而不是 t -
并将您的 Person 属性更改为 givenName 和 familyName
-
是的,如果我通过 Person.self 它当然可以工作,但重点是我试图在运行时动态地执行此操作。也不确定属性的名称与什么有关?
-
没有说属性名称会改变什么
标签: json swift swift4 swift-protocols decodable