This commit is contained in:
John Estropia
2019-10-29 20:18:14 +09:00
parent c112a84c0a
commit 6b9a4b480b
4 changed files with 23 additions and 10 deletions

View File

@@ -356,7 +356,7 @@ extension ObjectPublisher where O: NSManagedObject {
public func value<V: AllowedObjectiveCKeyPathValue>(forKeyPath keyPath: KeyPath<O, V>) -> V! {
let key = String(keyPath: keyPath)
return self.snapshot?.dictionaryForValues()[key] as! V?
return self.snapshot?.dictionaryForValues()[key] as? V
}
}

View File

@@ -120,11 +120,15 @@ public struct ObjectSnapshot<O: DynamicObject>: ObjectRepresentation, Hashable {
}
// MARK: FilePrivate
fileprivate var values: [String: Any]
// MARK: Private
private let id: O.ObjectID
private let context: NSManagedObjectContext
private var values: [String: Any]
private var valuesRef: NSDictionary {
@@ -153,7 +157,16 @@ extension ObjectSnapshot where O: NSManagedObject {
public func value<V: AllowedObjectiveCKeyPathValue>(forKeyPath keyPath: KeyPath<O, V>) -> V! {
let key = String(keyPath: keyPath)
return self.values[key] as! V?
return self.values[key] as? V
}
/**
Mutates the value for the property identified by a given key.
*/
public mutating func setValue<V: AllowedObjectiveCKeyPathValue>(_ value: V!, forKeyPath keyPath: KeyPath<O, V>) {
let key = String(keyPath: keyPath)
self.values[key] = value
}
}
@@ -187,7 +200,7 @@ extension ObjectSnapshot where O: CoreStoreObject {
get {
let key = String(keyPath: member)
return self.values[key] as! V?
return self.values[key] as? V
}
set {
@@ -221,7 +234,7 @@ extension ObjectSnapshot where O: CoreStoreObject {
get {
let key = String(keyPath: member)
return self.values[key] as! V?
return self.values[key] as? V
}
set {
@@ -238,7 +251,7 @@ extension ObjectSnapshot where O: CoreStoreObject {
get {
let key = String(keyPath: member)
guard let id = self.values[key] as! D.ObjectID? else {
guard let id = self.values[key] as? D.ObjectID else {
return nil
}

View File

@@ -191,7 +191,7 @@ public struct PartialObject<O: CoreStoreObject> {
*/
public func value<V>(for property: (O) -> TransformableContainer<O>.Optional<V>) -> V? {
return self.rawObject.value(forKey: property(O.meta).keyPath) as! V?
return self.rawObject.value(forKey: property(O.meta).keyPath) as? V
}
/**
@@ -212,7 +212,7 @@ public struct PartialObject<O: CoreStoreObject> {
*/
public func primitiveValue<V>(for property: (O) -> TransformableContainer<O>.Optional<V>) -> V? {
return self.rawObject.primitiveValue(forKey: property(O.meta).keyPath) as! V?
return self.rawObject.primitiveValue(forKey: property(O.meta).keyPath) as? V
}
/**

View File

@@ -380,7 +380,7 @@ public enum TransformableContainer<O: CoreStoreObject> {
return customGetter(PartialObject<O>(object))
}
return object.value(forKey: self.keyPath) as! V?
return object.value(forKey: self.keyPath) as? V
}
}
set {
@@ -489,7 +489,7 @@ public enum TransformableContainer<O: CoreStoreObject> {
}
customSetter(
PartialObject<O>(rawObject),
newValue as! V?
newValue as? V
)
}
}