我在Gloss中执行一项非常简单的任务时遇到了麻烦:从字符串构造模型实例。
Gloss定义了typealias JSON
:
public typealias JSON = [String : Any]
并在使用JSON
协议反序列化JSON时需要Decodable
的实例:
struct MyModel: Decodable {
let item1: String?
let item2: String?
init?(json: JSON) {
self.item1 = "item1" <~~ json
self.item2 = "item2" <~~ json
}
}
Gloss documentation解释了如何从类型[String : Any]
(又名JSON
)的数组初始化模型对象,但没有提到如何从JSON-初始化模型对象字符串。
我找到了以下解决方案,但必须有一个更简单/更清洁的解决方案:
// Assume the following is in a function
let jsonString = "{\"item1\":\"some value\", \"item2\":\"another value\"}"
guard let data = jsonString.data(using: .utf8, allowLossyConversion: false)
else { return nil }
guard let jsonData = try? JSONSerialization.jsonObject(with: data)
else { return nil }
guard let json = jsonData as? JSON
else { return nil }
return MyModel(json: json)
我是否遗漏了一些明显的东西,或者这是使光学解码成为JSON字符串的唯一方法吗?