我有一个核心数据实体,它有一个可以表示不同类型值的属性(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
}
}
}
}
答案 0 :(得分:2)
虽然我首先想到这个架构很长很难,但我同意这个功能可能有一个案例,除了SO之外还应该问这个问题*。
一种选择是使用可转换的属性类型。这种类型允许coreData存储符合NSCoding的任何对象(NSArray,NSDictionary等)以及我相信的NSString和NSNumber。
因此,您可以将该对象检索为泛型类型(Objective-C中的id,不知道swift中的等效项),然后查询它的类型并将其转换为您需要的任何类型。
这种方法的缺点当然是你在查询商店时失去了很多coreData的能力,因为你存储为可转换属性的值对于谓词等或多或少都是不透明的。但是它适用于使用关键路径遍历核心数据结构。
*)我相信我读到VB中等效的变体数据类型是Joel Spolsky对该语言的贡献...