# DynamicObject Protocol Reference

# DynamicObject

    public protocol DynamicObject : AnyObject

All CoreStore’s utilities are designed around `DynamicObject` instances. `NSManagedObject` and `CoreStoreObject` instances all conform to `DynamicObject`.

- `cs_forceCreate(entityDescription:into:assignTo:)`

  Used internally by CoreStore. Do not call directly.

  #### Declaration

  Swift

      static func cs_forceCreate(entityDescription: NSEntityDescription, into context: NSManagedObjectContext, assignTo store: NSPersistentStore) -> Self

- `cs_fromRaw(object:)`

  Used internally by CoreStore. Do not call directly.

  #### Declaration

  Swift

      static func cs_fromRaw(object: NSManagedObject) -> Self

- `cs_matches(object:)`

  Used internally by CoreStore. Do not call directly.

  #### Declaration

  Swift

      static func cs_matches(object: NSManagedObject) -> Bool

- `cs_id()`

  Used internally by CoreStore. Do not call directly.

  #### Declaration

  Swift

      func cs_id() -> NSManagedObjectID

- `cs_toRaw()`

  Used internally by CoreStore. Do not call directly.

  #### Declaration

  Swift

      func cs_toRaw() -> NSManagedObject

### DynamicObject where Self: CoreStoreObject

- `partialObject()` Extension method

  Returns the `PartialObject` instance for the object, which acts as a fast, type-safe KVC interface for `CoreStoreObject`.

  #### Declaration

  Swift

      public func partialObject() -> PartialObject<Self>

### DynamicObject

- `Relationship` Extension method

  The containing type for relationships. `Relationship`s can be any `CoreStoreObject` subclass.

      class Dog: CoreStoreObject {
          let master = Relationship.ToOne<Person>("master")
      }
      class Person: CoreStoreObject {
          let pets = Relationship.ToManyUnordered<Dog>("pets", inverse: { $0.master })
      }

  Important

  `Relationship` properties are required to be stored properties. Computed properties will be ignored, including `lazy` and `weak` properties.

  #### Declaration

  Swift

      public typealias Relationship = RelationshipContainer<Self>

### DynamicObject

- `Transformable` Extension method

  The containing type for transformable properties. `Transformable` properties support types that conforms to `NSCoding & NSCopying`.

      class Animal: CoreStoreObject {
          let species = Value.Required<String>("species", initial: "")
          let nickname = Value.Optional<String>("nickname")
          let color = Transformable.Optional<UIColor>("color")
      }

  Important

  `Transformable` properties are required to be stored properties. Computed properties will be ignored, including `lazy` and `weak` properties.

  #### Declaration

  Swift

      public typealias Transformable = TransformableContainer<Self>

### DynamicObject

- `Value` Extension method

  The containing type for value propertiess. `Value` properties support any type that conforms to `ImportableAttributeType`.

      class Animal: CoreStoreObject {
          let species = Value.Required<String>("species", initial: "")
          let nickname = Value.Optional<String>("nickname")
          let color = Transformable.Optional<UIColor>("color")
      }

  Important

  `Value` properties are required to be stored properties. Computed properties will be ignored, including `lazy` and `weak` properties.

  #### Declaration

  Swift

      public typealias Value = ValueContainer<Self>