我需要“复制”从远程 Web API 服务以 JSON 格式返回的实体。它看起来像这样:
{
"field1": "some_id",
"entity_name" = "Entity1"
"field2": "some name",
"details1": [{
"field1": 11,
"field2": "some value",
"data": {
"key1": "value1",
"key2": "value2",
"key3": "value3",
// any other, unknown at compile time keys
}
}],
"details2": {
"field1": 13,
"field2": "some value2"
}
}
这是我的尝试:
struct Entity1 {
struct Details1 {
let field1: UInt32
let field2: String
let data: [String: String]
}
struct Details2 {
let field1: UInt32
let field2: String
}
let field1: String
static let entityName = "Entity1"
let field2: String
let details1: [Details1]
let details2: Details2
}
- 使用结构而不是类来实现这样的目标是个好主意吗
作为我的?
- 我可以无论如何定义一个嵌套结构或一个类吗?
详细信息1并同时创建它的变量?
像这样:
//doesn't compile
struct Entity1 {
let details1: [Details1 {
let field1: UInt32
let field2: String
let data: [String: String]
}]
如果有以下优秀的开源库可用于处理 Swift 中 JSON 到对象的映射,您可以使用任何一个,请看一下:
- Mapper
- 对象映射器
- JSON助手
- Argo
- Unbox
每个人都为初学者提供了很好的教程。
关于主题struct
or class
,您可以考虑以下文本Swift 编程语言文档:
结构实例总是按值传递,而类
实例始终通过引用传递。这意味着他们是
适合不同类型的任务。当你考虑数据时
项目所需的结构和功能,决定
每个数据结构是否应该被定义为一个类或者一个
结构。
作为一般准则,当一个或多个
以下条件适用:
- 该结构的主要目的是封装一些相对简单的数据值。
- 当您分配或传递一个值时,可以合理地预期封装的值将被复制而不是被引用。
该结构的实例。
- 该结构存储的任何属性本身都是值类型,也期望它们被复制而不是引用。
- 该结构不需要从另一个现有类型继承属性或行为。
结构的良好候选示例包括:
- 几何形状的大小,可能封装宽度属性和高度属性,两者都是 Double 类型。
- 一种引用系列中的范围的方法,可能封装一个起始属性和一个长度属性,两者都是 Int 类型。
- 3D 坐标系中的一个点,可能封装 x、y 和 z 属性,每个属性都是 Double 类型。
在所有其他情况下,定义一个类并创建该类的实例
通过引用进行管理和传递。在实践中,这意味着
大多数自定义数据构造应该是类,而不是结构。
我希望这对你有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)