relationships done!

This commit is contained in:
John Estropia
2017-04-06 20:28:17 +09:00
parent 8b77e4e5a0
commit 4fc10afe1e
10 changed files with 648 additions and 113 deletions

View File

@@ -29,7 +29,7 @@ import Foundation
// MARK: - ManagedObject
open class ManagedObject: ManagedObjectProtocol {
open class ManagedObject: ManagedObjectProtocol, Hashable {
public required init(_ object: NSManagedObject) {
@@ -45,6 +45,31 @@ open class ManagedObject: ManagedObjectProtocol {
}
// MARK: Equatable
public static func == (lhs: ManagedObject, rhs: ManagedObject) -> Bool {
guard lhs.isMeta == rhs.isMeta else {
return false
}
if lhs.isMeta {
return type(of: lhs) == type(of: rhs)
}
return lhs.rawObject!.isEqual(rhs.rawObject!)
}
// MARK: Hashable
public var hashValue: Int {
return ObjectIdentifier(self).hashValue
^ (self.isMeta ? 0 : self.rawObject!.hashValue)
}
// MARK: Internal
internal let rawObject: NSManagedObject?
@@ -58,11 +83,17 @@ open class ManagedObject: ManagedObjectProtocol {
_ = mirror.superclassMirror.flatMap({ self.initializeAttributes($0, accessRawObject) })
for child in mirror.children {
guard case let property as AttributeProtocol = child.value else {
switch child.value {
case let property as AttributeProtocol:
property.accessRawObject = accessRawObject
case let property as RelationshipProtocol:
property.accessRawObject = accessRawObject
default:
continue
}
property.accessRawObject = accessRawObject
}
}
}