지속형

@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는 Realm에서 managed해야 하는 객체 하위 클래스의 속성을 선언하는 데 사용됩니다.

사용 예시:

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
}

indexed: true 을 이니셜라이저에 전달하여 Int, Bool, String, ObjectId 및 Date 속성을 인덱싱할 수 있습니다. 속성을 인덱싱하면 해당 속성에 대한 동일성 쿼리의 성능이 향상되지만, 쓰기 성능은 약간 저하됩니다. 현재 이 인덱스를 사용하는 다른 작업은 없습니다.

primaryKey: true 을 이니셜라이저에 전달하여 속성을 클래스의 기본 키로 설정할 수 있습니다. 복합 기본 키는 지원되지 않으며, 둘 이상의 속성을 기본 키로 설정하면 런타임에 예외가 발생합니다. Int, String, UUID 및 ObjectId 속성만 기본 키로 만들 수 있으며, Atlas App Services를 사용할 때는 기본 키의 이름을 _id 로 지정해야 합니다. 프라이머리 키 속성은 관리되지 않는 객체에서만 변경할 수 있으며 Realm에 추가된 객체에서 변경하면 예외가 발생합니다.

속성은 표준 Swift 구문을 사용하여 선택적으로 기본값을 지정할 수 있습니다. 기본값을 지정하지 않으면 처음 액세스할 때 값이 생성됩니다(모든 Optional 유형의 경우 nil , 숫자 유형의 경우 0, Bool의 경우 false, 빈 문자열/데이터의 경우, UUID 및 ObjectID에 대한 새로운 임의의 값). 목록 및 MutableSet 속성은 빈 List/MutableSet의 기본값으로 설정하여 정의 해서는 안 됩니다. 이렇게 하면 작동하지만 Realm에서 managed하는 객체에 액세스할 때 성능이 저하됩니다. 마찬가지로 ObjectID 속성을 ObjectID.generate() 로 초기화 해서는 안 되며, 이렇게 하면 추가 ObjectID가 생성된 후 Realm에서 읽을 때 삭제될 수 있습니다.

클래스에 @Persisted 속성이 하나 이상 있으면 다른 모든 속성은 Realm에서 무시됩니다. 즉, managed 속성이 유지되지 않으며 쿼리 및 managed 속성이 필요한 정렬 및 집계와 같은 기타 작업에 사용할 수 없습니다.

@Persisted는 객체 또는 EmbeddedObject 하위 클래스의 속성 이외의 다른 곳에서는 사용할 수 없으며 다른 위치에서 사용하려고 하면 런타임 오류가 발생합니다.

  • 유형의 기본값으로 느리게 초기화되는 속성을 선언합니다.

    선언

    Swift

    public init()
  • 지정된 값을 기본값으로 사용하는 속성을 선언합니다.

    선언

    Swift

    public init(wrappedValue value: Value)

Value: Decodable에서 사용 가능

Value: Encodable에서 사용 가능

Value.PersistedType: _Indexable에서 사용 가능

Value.PersistedType: _PrimaryKey에서 사용 가능

Value: LinkingObjectsProtocol에서 사용 가능

  • 지정된 원본 속성 이름을 사용하여 LinkingObjects 속성을 선언합니다.

    • param originProperty: 이 객체에 연결되는 Realm 객체 유형의 속성의 이름입니다.

    선언

    Swift

    public init(originProperty: String)