Persistente

@propertyWrapper
public struct Persisted<Value> where Value : _Persistable
extension Persisted: Decodable where Value: Decodable
extension Persisted: Encodable where Value: Encodable
extension Persisted: OptionalCodingWrapper where Value: ExpressibleByNilLiteral

@Persisted é usado para declarar propriedade em subclasses de objeto que devem ser managed pelo Realm.

Exemplo de uso:

class MyModel: Object {
    // A basic property declaration. A property with no
    // default value supplied will default to `nil` for
    // Optional types, zero for numeric types, false for Bool,
    // an empty string/data, and a new random value for UUID
    // and ObjectID.
    @Persisted var basicIntProperty: Int

    // Custom default values can be specified with the
    // standard Swift syntax
    @Persisted var intWithCustomDefault: Int = 5

    // Properties can be indexed by passing `indexed: true`
    // to the initializer.
    @Persisted(indexed: true) var indexedString: String

    // Properties can set as the class's primary key by
    // passing `primaryKey: true` to the initializer
    @Persisted(primaryKey: true) var _id: ObjectId

    // List and set properties should always be declared
    // with `: List` rather than `= List()`
    @Persisted var listProperty: List<Int>
    @Persisted var setProperty: MutableSet<MyObject>

    // LinkingObjects properties require setting the source
    // object link property name in the initializer
    @Persisted(originProperty: "outgoingLink")
    var incomingLinks: LinkingObjects<OtherModel>

    // Properties which are not marked with @Persisted will
    // be ignored entirely by Realm.
    var ignoredProperty = true
}

As propriedades Int, Bool, String, ObjectId e Date podem ser indexadas passando indexed: true para o inicializador. A indexação de uma propriedade melhora o desempenho das query de igualdade nessa propriedade, ao custo de um desempenho de gravação um pouco pior. Nenhuma outra operação usa o índice atualmente.

A property can be set as the class’s primary key by passing primaryKey: true to the initializer. Compound primary keys are not supported, and setting more than one property as the primary key will throw an exception at runtime. Only Int, String, UUID and ObjectID properties can be made the primary key. The primary key property can only be mutated on unmanaged objects, and mutating it on an object which has been added to a Realm will throw an exception.

Opcionalmente, as propriedades podem receber um valor padrão usando a sintaxe Swift padrão. Se nenhum valor padrão for fornecido, um valor será gerado no primeiro acesso: nil para todos os tipos opcionais, zero para tipos numéricos, false para Bool, uma string/dados vazios e um novo valor aleatório para UUID e ObjectId. As propriedades List e MutableSet não devem ser definidas definindo-as para um valor padrão de um List/MutableSet vazio. Isso funcionará, mas resultará em um desempenho pior ao acessar objeto managed por um Realm. Da mesma forma, a propriedade ObjectId não devem ser inicializadas com ObjectID.generate(), pois isso resultará na geração de ObjectId extras e, em seguida, descartados ao ler de um Realm.

Se uma classe tiver pelo menos uma propriedade @Persisted, todas as outras propriedades serão ignoradas pelo Realm. Isso significa que eles não serão persistentes e não poderão ser usados em queries e outras operações, como classificação e agregados, que exigem uma propriedade gerenciada.

@Persisted não pode ser usado em nenhum lugar que não seja como uma propriedade em um objeto ou subclasse EmbeddedObject, e tentar usá-lo em outros locais resultará em erros de tempo de execução.

  • Declara uma propriedade que é inicializada de modo lento com o valor padrão do tipo.

    Declaração

    Swift

    public init()
  • Declara uma propriedade cujo padrão é o valor fornecido.

    Declaração

    Swift

    public init(wrappedValue value: Value)

Disponível onde Value: Decodable

Disponível onde Value: Encodable

Disponível onde Value.PersistedType: _Indexable

Disponível onde Value.PersistedType: _PrimaryKey

Disponível onde Value: LinkingObjectsProtocol

  • Declara uma propriedade LinkingObjects com o nome da propriedade de origem fornecido.

    • param originProperty: o nome da propriedade no Tipo de objeto de Realm de vinculação que vincula a este objeto.

    Declaração

    Swift

    public init(originProperty: String)