最后有机会展示其中一个Codable
隐藏的协议。请在 Playground 中运行以下命令:
import Cocoa
let jsonData = """
{
"sender" : "Kira",
"created" : "08.05.2018",
"text" : "Cncncm"
}
""".data(using: .utf8)!
struct SenderText: Codable {
let sender: String
let created: Date
let text: String
}
let dayFormatter = DateFormatter()
dayFormatter.dateFormat = "dd.MM.yyyy"
let date = dayFormatter.date(from:"08.05.2018")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(dayFormatter)
do {
let sendText = try decoder.decode(SenderText.self, from: jsonData)
print(sendText)
} catch {
print(error)
}
定义如此复杂的解析器将凌乱的 JSON 字符串映射到您最喜欢的解析器是多么容易的纯粹优雅struct
几乎不会让我感到惊讶。无论您的日期格式看起来多么奇怪,在此过程中它与被解析的距离几乎不超过 3 行。
关于强制转换,你应该注意一些事情:在 Swift 中,就像在大多数面向对象的语言中一样,只有当(且仅当)它首先已经是其他东西时(但知识已经在某处丢失)。由于您String
的“只是”一个String
(伪装成Any
可能),您将无法将其投射到其他任何东西上。然而,该Codable
协议为您提供了一种非常轻松decode
的方法。Strings
Data
这个过程不应该被误认为是演员表,即使它看起来大致相同。它是从一个简单的块创建和初始化另一个更合适的结构化对象Data
您很可能从您选择的普通 Web 服务中获得了这些信息。
到目前为止很好,至少在我的书中。