Stored

@propertyWrapper
public struct Stored<V> : AttributeKeyPathStringConvertible, FieldAttributeProtocol where V : FieldStorableType

The containing type for stored property values. Any type that conforms to FieldStorableType are supported.

class Person: CoreStoreObject {

    @Field.Stored("title")
    var title: String = "Mr."

    @Field.Stored("nickname")
    var nickname: String?
}

Important

Field properties are required to be used as @propertyWrappers. Any other declaration not using the @Field.Stored(...) var syntax will be ignored.
  • Initializes the metadata for the property.

    class Person: CoreStoreObject {
    
        @Field.Stored("title")
        var title: String = "Mr."
    }
    

    Declaration

    Swift

    public init(
        wrappedValue initial: @autoclosure @escaping () -> V,
        _ keyPath: KeyPathString = { fatalError("'keyPath' argument required (SR-13069 workaround)") }(),
        versionHashModifier: @autoclosure @escaping () -> String? = nil,
        previousVersionKeyPath: @autoclosure @escaping () -> String? = nil,
        customGetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>) -> V)? = nil,
        customSetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>, _ newValue: V) -> Void)? = nil,
        affectedByKeyPaths: @autoclosure @escaping () -> Set<KeyPathString> = []
    )

    Parameters

    initial

    the initial value for the property that is shared for all instances of this object. Note that this is evaluated during DataStack setup, not during object creation. To assign a value during object creation, use the dynamicInitialValue argument instead.

    keyPath

    the permanent attribute name for this property.

    versionHashModifier

    used 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.)

    previousVersionKeyPath

    used to resolve naming conflicts between models. When creating an entity mapping between entities in two managed object models, a source entity property’s keyPath with a matching destination entity property’s previousVersionKeyPath 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 keyPath.

    customGetter

    use this closure as an “override” for the default property getter. The closure receives a ObjectProxy<O>, which acts as a type-safe proxy for the receiver. When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively. Do not make assumptions on the thread/queue that the closure is executed on; accessors may be called from NSError logs for example.

    customSetter

    use this closure as an “override” for the default property setter. The closure receives a ObjectProxy<O>, which acts as a fast, type-safe KVC interface for CoreStoreObject. The reason a CoreStoreObject instance is not passed directly is because the Core Data runtime is not aware of CoreStoreObject properties’ static typing, and so loading those info everytime KVO invokes this accessor method incurs a cumulative performance hit (especially in KVO-heavy operations such as ListMonitor observing.) When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively.

    affectedByKeyPaths

    a set of key paths for properties whose values affect the value of the receiver. This is similar to NSManagedObject.keyPathsForValuesAffectingValue(forKey:).

  • Initializes the metadata for the property.

    class Person: CoreStoreObject {
    
        @Field.Stored("title", dynamicInitialValue: { Person.randomTitle() })
        var title: String
    }
    

    Declaration

    Swift

    public init(
        _ keyPath: KeyPathString,
        versionHashModifier: @autoclosure @escaping () -> String? = nil,
        previousVersionKeyPath: @autoclosure @escaping () -> String? = nil,
        customGetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>) -> V)? = nil,
        customSetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>, _ newValue: V) -> Void)? = nil,
        affectedByKeyPaths: @autoclosure @escaping () -> Set<KeyPathString> = [],
        dynamicInitialValue: @escaping () -> V
    )

    Parameters

    keyPath

    the permanent attribute name for this property.

    versionHashModifier

    used 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.)

    previousVersionKeyPath

    used to resolve naming conflicts between models. When creating an entity mapping between entities in two managed object models, a source entity property’s keyPath with a matching destination entity property’s previousVersionKeyPath 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 keyPath.

    customGetter

    use this closure as an “override” for the default property getter. The closure receives a ObjectProxy<O>, which acts as a type-safe proxy for the receiver. When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively. Do not make assumptions on the thread/queue that the closure is executed on; accessors may be called from NSError logs for example.

    customSetter

    use this closure as an “override” for the default property setter. The closure receives a ObjectProxy<O>, which acts as a fast, type-safe KVC interface for CoreStoreObject. The reason a CoreStoreObject instance is not passed directly is because the Core Data runtime is not aware of CoreStoreObject properties’ static typing, and so loading those info everytime KVO invokes this accessor method incurs a cumulative performance hit (especially in KVO-heavy operations such as ListMonitor observing.) When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively.

    affectedByKeyPaths

    a set of key paths for properties whose values affect the value of the receiver. This is similar to NSManagedObject.keyPathsForValuesAffectingValue(forKey:).

    dynamicInitialValue

    the initial value for the property when the object is first created.

AnyKeyPathStringConvertible

  • Declaration

    Swift

    public var cs_keyPathString: String { get }

KeyPathStringConvertible

AttributeKeyPathStringConvertible

FieldContainer.Stored

  • Creates a Where clause by comparing if a property is equal to a value

    let person = dataStack.fetchOne(From<Person>().where({ $0.nickname == "John" }))
    

    Declaration

    Swift

    public static func == (attribute: `Self`, value: V) -> Where<O>
  • Creates a Where clause by comparing if a property is not equal to a value

    let person = dataStack.fetchOne(From<Person>().where({ $0.nickname != "John" }))
    

    Declaration

    Swift

    public static func != (attribute: `Self`, value: V) -> Where<O>
  • Creates a Where clause by comparing if a property is less than a value

    let person = dataStack.fetchOne(From<Person>().where({ $0.age < 20 }))
    

    Declaration

    Swift

    public static func < (attribute: `Self`, value: V) -> Where<O>
  • Creates a Where clause by comparing if a property is greater than a value

    let person = dataStack.fetchOne(From<Person>().where({ $0.age > 20 }))
    

    Declaration

    Swift

    public static func > (attribute: `Self`, value: V) -> Where<O>
  • Creates a Where clause by comparing if a property is less than or equal to a value

    let person = dataStack.fetchOne(From<Person>().where({ $0.age <= 20 }))
    

    Declaration

    Swift

    public static func <= (attribute: `Self`, value: V) -> Where<O>
  • Creates a Where clause by comparing if a property is greater than or equal to a value

    let person = dataStack.fetchOne(From<Person>().where({ $0.age >= 20 }))
    

    Declaration

    Swift

    public static func >= (attribute: `Self`, value: V) -> Where<O>
  • Creates a Where clause by checking if a sequence contains the value of a property

    let dog = dataStack.fetchOne(From<Dog>().where({ ["Pluto", "Snoopy", "Scooby"] ~= $0.nickname }))
    

    Declaration

    Swift

    public static func ~= <S>(sequence: S, attribute: `Self`) -> Where<O> where V == S.Element, S : Sequence

Available where V: FieldOptionalType

  • Initializes the metadata for the property.

    class Person: CoreStoreObject {
    
        @Field.Stored("nickname")
        var nickname: String?
    }
    

    Declaration

    Swift

    public init(
        wrappedValue initial: @autoclosure @escaping () -> V = nil,
        _ keyPath: KeyPathString = { fatalError("'keyPath' argument required (SR-13069 workaround)") }(),
        versionHashModifier: @autoclosure @escaping () -> String? = nil,
        previousVersionKeyPath: @autoclosure @escaping () -> String? = nil,
        customGetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>) -> V)? = nil,
        customSetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>, _ newValue: V) -> Void)? = nil,
        affectedByKeyPaths: @autoclosure @escaping () -> Set<KeyPathString> = []
    )

    Parameters

    initial

    the initial value for the property that is shared for all instances of this object. Note that this is evaluated during DataStack setup, not during object creation. To assign a value during object creation, use the dynamicInitialValue argument instead.

    keyPath

    the permanent attribute name for this property.

    versionHashModifier

    used 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.)

    previousVersionKeyPath

    used to resolve naming conflicts between models. When creating an entity mapping between entities in two managed object models, a source entity property’s keyPath with a matching destination entity property’s previousVersionKeyPath 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 keyPath.

    customGetter

    use this closure as an “override” for the default property getter. The closure receives a ObjectProxy<O>, which acts as a type-safe proxy for the receiver. When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively. Do not make assumptions on the thread/queue that the closure is executed on; accessors may be called from NSError logs for example.

    customSetter

    use this closure as an “override” for the default property setter. The closure receives a ObjectProxy<O>, which acts as a fast, type-safe KVC interface for CoreStoreObject. The reason a CoreStoreObject instance is not passed directly is because the Core Data runtime is not aware of CoreStoreObject properties’ static typing, and so loading those info everytime KVO invokes this accessor method incurs a cumulative performance hit (especially in KVO-heavy operations such as ListMonitor observing.) When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively.

    affectedByKeyPaths

    a set of key paths for properties whose values affect the value of the receiver. This is similar to NSManagedObject.keyPathsForValuesAffectingValue(forKey:).

  • Initializes the metadata for the property.

    class Person: CoreStoreObject {
    
        @Field.Stored("nickname", dynamicInitialValue: { Person.randomNickname() })
        var nickname: String?
    }
    

    Declaration

    Swift

    public init(
        _ keyPath: KeyPathString,
        versionHashModifier: @autoclosure @escaping () -> String? = nil,
        previousVersionKeyPath: @autoclosure @escaping () -> String? = nil,
        customGetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>) -> V)? = nil,
        customSetter: ((_ object: ObjectProxy<O>, _ field: ObjectProxy<O>.FieldProxy<V>, _ newValue: V) -> Void)? = nil,
        affectedByKeyPaths: @autoclosure @escaping () -> Set<KeyPathString> = [],
        dynamicInitialValue: @escaping () -> V
    )

    Parameters

    keyPath

    the permanent attribute name for this property.

    versionHashModifier

    used 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.)

    previousVersionKeyPath

    used to resolve naming conflicts between models. When creating an entity mapping between entities in two managed object models, a source entity property’s keyPath with a matching destination entity property’s previousVersionKeyPath 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 keyPath.

    customGetter

    use this closure as an “override” for the default property getter. The closure receives a ObjectProxy<O>, which acts as a type-safe proxy for the receiver. When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively. Do not make assumptions on the thread/queue that the closure is executed on; accessors may be called from NSError logs for example.

    customSetter

    use this closure as an “override” for the default property setter. The closure receives a ObjectProxy<O>, which acts as a fast, type-safe KVC interface for CoreStoreObject. The reason a CoreStoreObject instance is not passed directly is because the Core Data runtime is not aware of CoreStoreObject properties’ static typing, and so loading those info everytime KVO invokes this accessor method incurs a cumulative performance hit (especially in KVO-heavy operations such as ListMonitor observing.) When accessing the property value from ObjectProxy<O>, make sure to use field.primitiveValue instead of field.value, which would unintentionally execute the same closure again recursively.

    affectedByKeyPaths

    a set of key paths for properties whose values affect the value of the receiver. This is similar to NSManagedObject.keyPathsForValuesAffectingValue(forKey:).

    dynamicInitialValue

    the initial value for the property when the object is first created.