mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-04-27 19:27:10 +02:00
safer casting
This commit is contained in:
@@ -133,11 +133,11 @@ public struct ObjectProxy<O: CoreStoreObject> {
|
|||||||
let keyPathString = field.keyPath
|
let keyPathString = field.keyPath
|
||||||
self.getValue = {
|
self.getValue = {
|
||||||
|
|
||||||
return FieldContainer<OBase>.Stored<V>.read(field: field, for: rawObject) as! V
|
return type(of: field).read(field: field, for: rawObject) as! V
|
||||||
}
|
}
|
||||||
self.setValue = {
|
self.setValue = {
|
||||||
|
|
||||||
FieldContainer<OBase>.Stored<V>.modify(field: field, for: rawObject, newValue: $0)
|
type(of: field).modify(field: field, for: rawObject, newValue: $0)
|
||||||
}
|
}
|
||||||
self.getPrimitiveValue = {
|
self.getPrimitiveValue = {
|
||||||
|
|
||||||
@@ -159,11 +159,11 @@ public struct ObjectProxy<O: CoreStoreObject> {
|
|||||||
let keyPathString = field.keyPath
|
let keyPathString = field.keyPath
|
||||||
self.getValue = {
|
self.getValue = {
|
||||||
|
|
||||||
return FieldContainer<OBase>.Virtual<V>.read(field: field, for: rawObject) as! V
|
return type(of: field).read(field: field, for: rawObject) as! V
|
||||||
}
|
}
|
||||||
self.setValue = {
|
self.setValue = {
|
||||||
|
|
||||||
FieldContainer<OBase>.Virtual<V>.modify(field: field, for: rawObject, newValue: $0)
|
type(of: field).modify(field: field, for: rawObject, newValue: $0)
|
||||||
}
|
}
|
||||||
self.getPrimitiveValue = {
|
self.getPrimitiveValue = {
|
||||||
|
|
||||||
@@ -192,11 +192,11 @@ public struct ObjectProxy<O: CoreStoreObject> {
|
|||||||
let keyPathString = field.keyPath
|
let keyPathString = field.keyPath
|
||||||
self.getValue = {
|
self.getValue = {
|
||||||
|
|
||||||
return FieldContainer<OBase>.Coded<V>.read(field: field, for: rawObject) as! V
|
return type(of: field).read(field: field, for: rawObject) as! V
|
||||||
}
|
}
|
||||||
self.setValue = {
|
self.setValue = {
|
||||||
|
|
||||||
FieldContainer<OBase>.Coded<V>.modify(field: field, for: rawObject, newValue: $0)
|
type(of: field).modify(field: field, for: rawObject, newValue: $0)
|
||||||
}
|
}
|
||||||
self.getPrimitiveValue = {
|
self.getPrimitiveValue = {
|
||||||
|
|
||||||
|
|||||||
@@ -379,7 +379,8 @@ extension ObjectPublisher where O: CoreStoreObject {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return FieldContainer<OBase>.Stored<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
let field = object[keyPath: member]
|
||||||
|
return type(of: field).read(field: field, for: rawObject) as! V?
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -394,7 +395,8 @@ extension ObjectPublisher where O: CoreStoreObject {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return FieldContainer<OBase>.Virtual<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
let field = object[keyPath: member]
|
||||||
|
return type(of: field).read(field: field, for: rawObject) as! V?
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -409,7 +411,8 @@ extension ObjectPublisher where O: CoreStoreObject {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return FieldContainer<OBase>.Coded<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
let field = object[keyPath: member]
|
||||||
|
return type(of: field).read(field: field, for: rawObject) as! V?
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -419,12 +422,16 @@ extension ObjectPublisher where O: CoreStoreObject {
|
|||||||
|
|
||||||
guard
|
guard
|
||||||
let object = self.object,
|
let object = self.object,
|
||||||
let rawObject = object.rawObject,
|
let rawObject = object.rawObject
|
||||||
let value = FieldContainer<OBase>.Relationship<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
|
||||||
else {
|
else {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
let field = object[keyPath: member]
|
||||||
|
guard let value = type(of: field).read(field: field, for: rawObject) as! V? else {
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
let nativeValue = V.cs_toNativeType(from: value)
|
let nativeValue = V.cs_toNativeType(from: value)
|
||||||
let snapshotValue = V.cs_valueForSnapshot(from: nativeValue)
|
let snapshotValue = V.cs_valueForSnapshot(from: nativeValue)
|
||||||
return V.cs_toPublishedType(from: snapshotValue, in: self.context)
|
return V.cs_toPublishedType(from: snapshotValue, in: self.context)
|
||||||
|
|||||||
Reference in New Issue
Block a user