Core data 核心数据:将不同类型保存为同一属性

Core data 核心数据:将不同类型保存为同一属性,core-data,swift2,Core Data,Swift2,我有一个核心数据实体,它有一个属性,可以表示不同类型的值(int、double、date、string) 如果我将所有这些值转换成一个字符串,然后再转换回来,是否会导致一些问题(例如精度损失) @nsmanaged var storedType : Int @nsmanaged var storedValue : String var value: Any? { { set { switch newValue { case is Int: self.storedValue

我有一个核心数据实体,它有一个属性,可以表示不同类型的值(int、double、date、string)

如果我将所有这些值转换成一个字符串,然后再转换回来,是否会导致一些问题(例如精度损失)

@nsmanaged var storedType : Int
@nsmanaged var storedValue : String
var value: Any? {
{
 set {
  switch newValue
  {
  case is Int:
    self.storedValue = String(newValue)
    self.storedType = 0

  ...

  case is string
    self.storedValue = newValue
    self.storedType = 5
  }
 }
 get {
  switch newValue
  {
  case is 0:
    return Int(self.storedValue)

  ...

  case is 5:
    return self.storedValue
  }
 }
}
}

虽然我会首先仔细考虑体系结构,但我同意可能存在这种功能的情况,除此之外,应该在哪里提出这个问题*

一个选项是使用可转换属性类型。这种类型允许coreData存储任何符合NSCoding的对象(NSArray、NSDictionary等),我相信还可以存储NSString和NSNumber

因此,您可以将该对象检索为泛型类型(Objective-C中的id,swift中不知道等效的id),然后查询该对象的类型并将其转换为您需要的任何类型

当然,这种方法的缺点是,当存储为可转换属性的值对谓词等变得或多或少不透明时,在查询存储时会失去很多coreData功能。但是,它可以很好地使用关键路径遍历核心数据结构


*)我相信我读到了VB中的等效变量数据类型是Joel Spolsky对该语言的贡献之一…

“我有一个核心数据实体,它有一个属性,可以表示不同类型的值(int、double、date、string)。”对不起,我得去一个黑暗的房间躺一会儿。同时,为什么要做这样的事情呢?实体描述了数据文件中的范围。数据文件可以是字符串、日期、整数、浮点或用户指定的任何自定义格式。所以要么我有一个包含一大堆子实体的抽象实体,要么我把范围值转换成字符串。用户可以在创建实体后更改格式。如果我使用子实体,我必须复制其他字段,删除实体,创建新实体,设置所有字段,并确保用户界面仍在运行,只需更改两个值:开始和结束。使用关系还需要几个很少使用的子实体。感谢您考虑我的问题和您的答案。我们中的一些人是自学成才的程序员,他们边做边学,他们唯一的帮助/指导的地方就是这样的网站。今天我被困在自己的一些架构问题上,因为在上面写东西而拖延时间……做一些其他的事情有助于解决问题。就像他们说的:睡吧