什么Codable
Codable是一种将JSON数据(或字典)绑定到Swift中的模型/类/对象的方法。 Codable首先在Swift 4中可用,它省去了手动绑定和保护JSON响应的工作。
实战代码
Jietu20200516-183808@2x.jpgCodable协议使解码平面数据变得很简单:如果您解码的是一个类型的单个实例,或者这些实例的数组或字典,那么一切就正常了。下面我们将解码稍微复杂一点的JSON:
一个array中包含另外一个array,并使用不同的数据类型
如果要解码这种分层数据,关键是为每个级别创建单独的类型。只要数据与您要求的层次结构匹配,Codable就可以解码所有内容,而无需我们做进一步的工作。
为了演示这一点,请将此按钮放入您的内容视图:
Button("Decode JSON") {
let input = """
{
"name": "Taylor Swift",
"address": {
"street": "555, Taylor Swift Avenue",
"city": "Nashville"
}
}
"""
// more code to come
}
这将在代码中创建一个 JSON 字符串。下面制作struct
struct User: Codable {
var name: String
var address: Address
}
struct Address: Codable {
var street: String
var city: String
}
希望现在您可以看到 JSON 包含的内容:用户具有名称字符串和地址,地址是街道字符串和城市字符串。
现在,对于最好的部分:我们可以将 JSON 字符串转换为数据类型(这是可编码的,然后将其解码为用户实例:
let data = Data(input.utf8)
let decoder = JSONDecoder()
if let user = try? decoder.decode(User.self, from: data) {
print(user.address.street)
}
如果你运行该程序,并点击按钮,你应该看到打印出来的地址 - 虽然只是为了避免疑问,我应该说,这不是她的实际地址!
可编码的级别数量没有限制 - 重要的是您定义的结构与您的 JSON 字符串匹配。
项目完代码
import SwiftUI
struct User: Codable {
var name: String
var qq: String
var address: Address
}
struct Address: Codable {
var street: String
var city: String
}
struct ContentView: View {
var body: some View {
VStack{
Text("SwiftUI之Codable是什么,有什么用")
.frame(maxWidth:.infinity)
.padding()
.background(Color.orange)
.padding()
Button("解析JSON") {
let input = """
{
"name": "知识大胖",
"qq": "3365059189",
"address": {
"street": "北京",
"city": "北京"
}
}
"""
let data = Data(input.utf8)
let decoder = JSONDecoder()
if let user = try? decoder.decode(User.self, from: data) {
print(user.address.street)
}
}
}
//.background(Color.orange)
}
}
推荐
基础文章推荐
经典教程推荐
- onevcat 大神的《SwiftUI 与 Combine 编程》
- 更新近百篇SwiftUI教程《SwiftUI2020教程》
- 帮您突破数据存储难关《SwiftUI vs CoreData数据存储解决方案》
技术源码推荐
基础
推荐文章
CoreData篇
TextField篇
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- 《SwiftUI实战之TextField风格自定义与formatters》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
- 《SwiftUI 当键盘出现时避免TextField被遮挡自动向上移动》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
JSON文件篇
一篇文章系列
- SwiftUI一篇文章全面掌握List(教程和源码)
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- SwiftUI一篇文章全面掌握Picker,解决数据选择(教程和源码)
- SwiftUI一篇文章全面掌握Form(教程和源码)
- SwiftUI Color 颜色一篇文章全解决
技术交流
QQ:3365059189
SwiftUI技术交流QQ群:518696470
- 请关注我的专栏icloudend, SwiftUI教程与源码
https://www.jianshu.com/c/7b3e3b671970
网友评论