Required
public final class Required<V> : AttributeKeyPathStringConvertible, AttributeProtocol where V : NSCoding, V : NSCopying
The containing type for transformable properties. Any type that conforms to NSCoding & NSCopying are supported.
class Animal: CoreStoreObject {
let species = Value.Required<String>("species", initial: "")
let nickname = Value.Optional<String>("nickname")
let color = Transformable.Optional<UIColor>("color")
}
Important
Transformable.Required properties are required to be stored properties. Computed properties will be ignored, including lazy and weak properties.
-
init(_:initial: isTransient: allowsExternalBinaryDataStorage: versionHashModifier: renamingIdentifier: customGetter: customSetter: affectedByKeyPaths: ) Initializes the metadata for the property.
class Animal: CoreStoreObject { let species = Value.Required<String>("species", initial: "") let color = Transformable.Required<UIColor>( "color", initial: UIColor.clear, isTransient: true, customGetter: Animal.getColor(_:) ) } private static func getColor(_ partialObject: PartialObject<Animal>) -> UIColor { let cachedColor = partialObject.primitiveValue(for: { $0.color }) if cachedColor != UIColor.clear { return cachedColor } let color: UIColor switch partialObject.value(for: { $0.species }) { case "Swift": color = UIColor.orange case "Bulbasaur": color = UIColor.green default: color = UIColor.black } partialObject.setPrimitiveValue(color, for: { $0.color }) return color }Declaration
Swift
public init( _ keyPath: KeyPathString, initial: @autoclosure @escaping () -> V, isTransient: Bool = false, allowsExternalBinaryDataStorage: Bool = false, versionHashModifier: @autoclosure @escaping () -> String? = nil, renamingIdentifier: @autoclosure @escaping () -> String? = nil, customGetter: ((_ partialObject: PartialObject<O>) -> V)? = nil, customSetter: ((_ partialObject: PartialObject<O>, _ newValue: V) -> Void)? = nil, affectedByKeyPaths: @autoclosure @escaping () -> Set<String> = [])Parameters
keyPaththe permanent attribute name for this property.
initialthe initial value for the property that is shared for all instances of this object. Note that this is evaluated during
DataStacksetup, not during object creation. Defaults to theImportableAttributeType‘s empty value if not specified.isTransienttrueif the property is transient, otherwisefalse. Defaults tofalseif not specified. The transient flag specifies whether or not a property’s value is ignored when an object is saved to a persistent store. Transient properties are not saved to the persistent store, but are still managed for undo, redo, validation, and so on.allowsExternalBinaryDataStoragetrueif the attribute allows external binary storage, otherwisefalse.versionHashModifierused to mark or denote a property as being a different “version” than another even if all of the values which affect persistence are equal. (Such a difference is important in cases where the properties are unchanged but the format or content of its data are changed.)
renamingIdentifierused to resolve naming conflicts between models. When creating an entity mapping between entities in two managed object models, a source entity property and a destination entity property that share the same identifier indicate that a property mapping should be configured to migrate from the source to the destination. If unset, the identifier will be the property’s name.
customGetteruse this closure as an “override” for the default property getter. The closure receives a
PartialObject<O>, which acts as a fast, type-safe KVC interface forCoreStoreObject. The reason aCoreStoreObjectinstance is not passed directly is because the Core Data runtime is not aware ofCoreStoreObjectproperties’ static typing, and so loading those info everytime KVO invokes this accessor method incurs a cumulative performance hit (especially in KVO-heavy operations such asListMonitorobserving.) When accessing the property value fromPartialObject<O>, make sure to usePartialObject<O>.primitiveValue(for:)instead ofPartialObject<O>.value(for:), which would unintentionally execute the same closure again recursively.customSetteruse this closure as an “override” for the default property setter. The closure receives a
PartialObject<O>, which acts as a fast, type-safe KVC interface forCoreStoreObject. The reason aCoreStoreObjectinstance is not passed directly is because the Core Data runtime is not aware ofCoreStoreObjectproperties’ static typing, and so loading those info everytime KVO invokes this accessor method incurs a cumulative performance hit (especially in KVO-heavy operations such asListMonitorobserving.) When accessing the property value fromPartialObject<O>, make sure to usePartialObject<O>.setPrimitiveValue(_:for:)instead ofPartialObject<O>.setValue(_:for:), which would unintentionally execute the same closure again recursively.affectedByKeyPathsa set of key paths for properties whose values affect the value of the receiver. This is similar to
NSManagedObject.keyPathsForValuesAffectingValue(forKey:). -
The attribute value
Declaration
Swift
public var value: ReturnValueType { get set }
-
Declaration
Swift
public var cs_keyPathString: String { get }
-
Declaration
Swift
public typealias ObjectType = O -
Declaration
Swift
public typealias DestinationValueType = V
-
Declaration
Swift
public typealias ReturnValueType = DestinationValueType
-
Observes changes in the receiver value. When the returned
CoreStoreObjectKeyValueObservationis deinited or invalidated, it will stop observing.Declaration
Swift
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectTransformableDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservationParameters
optionsThe flags indicating which values to include in the change dictionary.
-
Assigns a transformable value to the property. The operation
animal.color .= UIColor.redis equivalent to
animal.color.value = UIColor.redDeclaration
Swift
public static func .= (property: TransformableContainer<O>.Required<V>, newValue: V) -
Assigns a transformable value from another property. The operation
animal.nickname .= anotherAnimal.speciesis equivalent to
animal.nickname.value = anotherAnimal.species.valueDeclaration
Swift
public static func .= <O2>(property: TransformableContainer<O>.Required<V>, property2: TransformableContainer<O2>.Required<V>) where O2 : CoreStoreObject
View on GitHub
Required Class Reference