@@ -25,33 +25,91 @@ internal extension NSManagedObject {
2525 guard let objectValue = self . value ( forKey: key. rawValue)
2626 else { return . null }
2727
28- if let string = objectValue as? String {
29- return . string( string)
30- } else if let uuid = objectValue as? UUID {
31- return . uuid( uuid)
32- } else if let url = objectValue as? URL {
33- return . url( url)
34- } else if let data = objectValue as? Data {
35- return . data( data)
36- } else if let date = objectValue as? Date {
37- return . date( date)
38- } else if let value = objectValue as? Bool {
28+ guard let coreDataAttribute = entity. attributesByName [ key. rawValue] else {
29+ assertionFailure ( " Unknown CoreData attribute \( key) " )
30+ throw CocoaError ( . coreData)
31+ }
32+
33+ guard let attributeType = AttributeType ( attributeType: coreDataAttribute. attributeType) else {
34+ assertionFailure ( " Invalid CoreData attribute \( coreDataAttribute) " )
35+ throw CocoaError ( . coreData)
36+ }
37+
38+ let value : AttributeValue
39+
40+ switch attributeType {
41+ case . bool:
42+ guard let value = objectValue as? Bool else {
43+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
44+ throw CocoaError ( . coreData)
45+ }
3946 return . bool( value)
40- } else if let value = objectValue as? Int16 {
47+ case . int16:
48+ guard let value = objectValue as? Int16 else {
49+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
50+ throw CocoaError ( . coreData)
51+ }
4152 return . int16( value)
42- } else if let value = objectValue as? Int32 {
53+ case . int32:
54+ guard let value = objectValue as? Int32 else {
55+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
56+ throw CocoaError ( . coreData)
57+ }
4358 return . int32( value)
44- } else if let value = objectValue as? Int64 {
59+ case . int64:
60+ guard let value = objectValue as? Int64 else {
61+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
62+ throw CocoaError ( . coreData)
63+ }
4564 return . int64( value)
46- } else if let value = objectValue as? Float {
65+ case . float:
66+ guard let value = objectValue as? Float else {
67+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
68+ throw CocoaError ( . coreData)
69+ }
4770 return . float( value)
48- } else if let value = objectValue as? Double {
71+ case . double:
72+ guard let value = objectValue as? Double else {
73+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
74+ throw CocoaError ( . coreData)
75+ }
4976 return . double( value)
50- } else if let value = objectValue as? NSDecimalNumber {
77+ case . string:
78+ guard let value = objectValue as? String else {
79+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
80+ throw CocoaError ( . coreData)
81+ }
82+ return . string( value)
83+ case . data:
84+ guard let value = objectValue as? Data else {
85+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
86+ throw CocoaError ( . coreData)
87+ }
88+ return . data( value)
89+ case . date:
90+ guard let value = objectValue as? Date else {
91+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
92+ throw CocoaError ( . coreData)
93+ }
94+ return . date( value)
95+ case . uuid:
96+ guard let value = objectValue as? UUID else {
97+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
98+ throw CocoaError ( . coreData)
99+ }
100+ return . uuid( value)
101+ case . url:
102+ guard let value = objectValue as? URL else {
103+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
104+ throw CocoaError ( . coreData)
105+ }
106+ return . url( value)
107+ case . decimal:
108+ guard let value = objectValue as? NSDecimalNumber else {
109+ assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
110+ throw CocoaError ( . coreData)
111+ }
51112 return . decimal( value as Decimal )
52- } else {
53- assertionFailure ( " Invalid CoreData attribute value \( objectValue) " )
54- throw CocoaError ( . coreData)
55113 }
56114 }
57115
0 commit comments