以优雅的方式将结构的属性传递给 class 实例
Passing the properties of a struct to a class instance the elegant way
我有这样的结构:
struct MyStruct: Codable {
let id: String?
let item: String?
let description: String?
let status: Bool?
}
在代码中的某些时候,我必须将其存储在具有相同属性的核心数据实体上。所以我必须这样做:
// new core data item
let newItem = MyObject(context: context)
newItem.id = myStruct.id
newItem.item = myStruct.item
newItem.description = myStruct.description
newItem.status = myStruct.status
现在假设这两个项目都有 50 个属性。我将不得不有 50 条这样的线,将东西从一侧保存到另一侧。
还有更漂亮的方法吗?
您可以在 returns 核心数据对象的结构中使用计算 属性。例如:
struct MyStruct: Codable {
let id: String?
let item: String?
let description: String?
let status: Bool?
func toCoreDataObject() -> MyObject {
let newItem = MyObject(context: context)
newItem.id = myStruct.id
newItem.item = myStruct.item
newItem.description = myStruct.description
newItem.status = myStruct.status
return newItem
}
}
这样你在结构定义中写了一次50个属性的列表,然后调用下面的函数
let coreDataObject = myStruct.toCoreDataObject()
我有这样的结构:
struct MyStruct: Codable {
let id: String?
let item: String?
let description: String?
let status: Bool?
}
在代码中的某些时候,我必须将其存储在具有相同属性的核心数据实体上。所以我必须这样做:
// new core data item
let newItem = MyObject(context: context)
newItem.id = myStruct.id
newItem.item = myStruct.item
newItem.description = myStruct.description
newItem.status = myStruct.status
现在假设这两个项目都有 50 个属性。我将不得不有 50 条这样的线,将东西从一侧保存到另一侧。
还有更漂亮的方法吗?
您可以在 returns 核心数据对象的结构中使用计算 属性。例如:
struct MyStruct: Codable {
let id: String?
let item: String?
let description: String?
let status: Bool?
func toCoreDataObject() -> MyObject {
let newItem = MyObject(context: context)
newItem.id = myStruct.id
newItem.item = myStruct.item
newItem.description = myStruct.description
newItem.status = myStruct.status
return newItem
}
}
这样你在结构定义中写了一次50个属性的列表,然后调用下面的函数
let coreDataObject = myStruct.toCoreDataObject()