你如何在 CoreData 中存储 UInt64?
How do you store an UInt64 in CoreData?
我的理解是 UInt64 可以是从 0 到 18446744073709551615 的任何值
我需要将 UInt64 标识符保存到 CoreData,但我看到的值是:
我最初尝试使用 Integer 64,但现在我了解到其范围为:-9223372036854775808 至 9223372036854775807
开发者通常会把 UInt64 存储为 String 并在两种类型之间进行转换吗?这是最佳做法吗?
您可以(无损地)在 UInt64
和 Int64
之间转换:
// Set:
obj.int64Property = Int64(bitPattern: uint64Value)
// Get:
let uint64Value = UInt64(bitPattern: obj.int64Property)
您可以将 uint64Value
定义为托管对象 class 的计算 属性 以自动转换:
@objc(MyEntity)
public class MyEntity: NSManagedObject {
public var uint64Property: UInt64 {
get {
return UInt64(bitPattern: int64Property)
}
set {
int64Property = Int64(bitPattern: newValue)
}
}
}
Martin R
接受的答案有效。
然而,这似乎是 Apple @NSManaged
属性的默认实现的一部分。
我是这样测试的:
- 我用 Core Data 创建了一个新的 Xcode 项目,并创建了一个名为
Hello
的实体。
- 它有一个名为
short
的属性,保存为 Integer 16
。
- 将 Codegen 标记为
Manual/None
- 为
Hello
创建了手册 class 文件,如下所示:
class Hello: NSManagedObject {
@NSManaged var short : UInt16
}
您会注意到我将其键入为无符号 UInt16
。
在我的 AppDelegate 中:
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Get Context
let context = self.persistentContainer.viewContext
// Create Test Objects
let hello1 = Hello(entity: Hello.entity(), insertInto: context)
hello1.short = 255
let hello2 = Hello(entity: Hello.entity(), insertInto: context)
hello2.short = 266 // Should overflow Int16
let hello3 = Hello(entity: Hello.entity(), insertInto: context)
hello3.short = 65535 // Should overflow Int16 by a lot
// Save them to the database
do {
try context.save()
} catch {
print(error)
}
// Fetch the save objects
let fetch = NSFetchRequest<Hello>(entityName: "Hello")
if let results = try? context.fetch(fetch) {
for result in results {
print(result.short)
}
}
}
这将打印出以下内容:
255
266
65535
我想这是有人希望在 Core Data 中保存无符号整数。
我的理解是 UInt64 可以是从 0 到 18446744073709551615 的任何值
我需要将 UInt64 标识符保存到 CoreData,但我看到的值是:
我最初尝试使用 Integer 64,但现在我了解到其范围为:-9223372036854775808 至 9223372036854775807
开发者通常会把 UInt64 存储为 String 并在两种类型之间进行转换吗?这是最佳做法吗?
您可以(无损地)在 UInt64
和 Int64
之间转换:
// Set:
obj.int64Property = Int64(bitPattern: uint64Value)
// Get:
let uint64Value = UInt64(bitPattern: obj.int64Property)
您可以将 uint64Value
定义为托管对象 class 的计算 属性 以自动转换:
@objc(MyEntity)
public class MyEntity: NSManagedObject {
public var uint64Property: UInt64 {
get {
return UInt64(bitPattern: int64Property)
}
set {
int64Property = Int64(bitPattern: newValue)
}
}
}
Martin R
接受的答案有效。
然而,这似乎是 Apple @NSManaged
属性的默认实现的一部分。
我是这样测试的:
- 我用 Core Data 创建了一个新的 Xcode 项目,并创建了一个名为
Hello
的实体。 - 它有一个名为
short
的属性,保存为Integer 16
。 - 将 Codegen 标记为
Manual/None
- 为
Hello
创建了手册 class 文件,如下所示:
class Hello: NSManagedObject {
@NSManaged var short : UInt16
}
您会注意到我将其键入为无符号 UInt16
。
在我的 AppDelegate 中:
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Get Context
let context = self.persistentContainer.viewContext
// Create Test Objects
let hello1 = Hello(entity: Hello.entity(), insertInto: context)
hello1.short = 255
let hello2 = Hello(entity: Hello.entity(), insertInto: context)
hello2.short = 266 // Should overflow Int16
let hello3 = Hello(entity: Hello.entity(), insertInto: context)
hello3.short = 65535 // Should overflow Int16 by a lot
// Save them to the database
do {
try context.save()
} catch {
print(error)
}
// Fetch the save objects
let fetch = NSFetchRequest<Hello>(entityName: "Hello")
if let results = try? context.fetch(fetch) {
for result in results {
print(result.short)
}
}
}
这将打印出以下内容:
255
266
65535
我想这是有人希望在 Core Data 中保存无符号整数。