EmbeddedObject

extension EmbeddedObject
extension EmbeddedObject: ObservableObject
extension EmbeddedObject: _RealmCollectionValueInsideOptional
extension EmbeddedObject: ThreadConfined

이니셜라이저

  • Realm 객체의 관리되지 않는 인스턴스를 만듭니다.

    value 인수는 객체를 채우는 데 사용됩니다. 키-값 코딩을 준수하는 객체, NSJSONSerialization 의 메서드에서 반환된 배열 또는 사전 또는 각 managed 속성에 대해 하나의 요소를 포함하는 Array 일 수 있습니다. 필수 속성이 없고 해당 속성이 기본값으로 정의되지 않은 경우 예외가 발생합니다.

    Arrayvalue 인수로 전달할 때 모든 속성이 존재하고 유효해야 하며 모델에 정의된 속성과 동일한 순서여야 합니다.

    관리되지 않는 내장된 객체는 managed 객체의 속성에 할당하거나 managed 목록에 추가하여 Realm에 추가할 수 있습니다.

    선언

    스위프트

    public convenience init(value: Any)

    매개변수

    value

    객체를 채우는 데 사용되는 값입니다.

속성

  • 객체를 managed하는 Realm이거나 객체가 관리되지 않는 경우 nil 입니다.

    선언

    스위프트

    public var realm: Realm? { get }
  • managed 객체의 속성을 나열하는 객체 스키마입니다.

    선언

    스위프트

    public var objectSchema: ObjectSchema { get }
  • 객체가 유효하지 않아 더 이상 액세스할 수 없는지 여부를 나타냅니다.

    객체는 관리된 Realm에서 삭제되었거나 해당 Realm에서 invalidate() 이(가) 호출된 경우 객체에 더 이상 액세스할 수 없습니다.

    선언

    스위프트

    public override final var isInvalidated: Bool { get }
  • 사람이 읽을 수 있는 객체에 대한 설명입니다.

    선언

    스위프트

    open override var description: String { get }

객체 사용자 지정

  • 무시할 속성의 이름을 지정하려면 이 메서드를 재정의합니다. 이러한 속성은 객체를 managed하는 Realm에서 managed하지 않습니다.

    경고

    이 함수는 @objc 를 사용하는 레거시 속성 선언에만 적용됩니다. @Persisted 을 사용할 때 @Persisted 로 표시되지 않은 속성은 자동으로 무시됩니다.

    선언

    스위프트

    @objc
    open class func ignoredProperties() -> [String]

    반환 값

    무시할 속성 이름의 배열입니다.

  • 공개-비공개 속성 이름 맵을 지정하려면 이 메서드를 재정의합니다. 이렇게 하면 Realm에 다른 영구 속성 이름이 설정되고 속성을 다루는 모든 작업에 공개 이름을 사용할 수 있습니다. (예: 쿼리, 정렬 등). 이는 Device Sync JSON 스키마의 속성 이름을 로컬 속성 이름에 매핑해야 하는 경우 매우 유용합니다.

    class Person: EmbeddedObject {
        @Persisted var firstName: String
        @Persisted var birthDate: Date
        @Persisted var age: Int
    
        override class public func propertiesMapping() -> [String : String] {
            ["firstName": "first_name",
             "birthDate": "birth_date"]
        }
    }
    

    참고

    열 이름이 다른 속성만 속성 매핑 사전에 추가하면 됩니다.

    선언

    스위프트

    open override class func propertiesMapping() -> [String : String]

    반환 값

    public-private 속성 이름 사전입니다.

키-값 코딩 & 구독

  • 지정된 이름을 가진 속성의 값을 반환하거나 설정합니다.

    선언

    스위프트

    @objc
    open subscript(key: String) -> Any? { get set }

알림

  • 객체가 변경될 때마다 호출될 블록을 등록합니다.

    이 블록은 객체를 삭제하거나 속성을 기존 값으로 설정하는 자체 할당을 포함하여 객체의 managed 속성을 수정하는 각 쓰기 트랜잭션(write transaction) 후에 비동기적으로 호출됩니다.

    다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.

    알림은 표준 이벤트 루프를 통해 전달되므로 다른 활동으로 이벤트 루프가 차단된 동안에는 전달할 수 없습니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.

    ListResults 과 달리 새 알림 차단을 추가한 후에는 '초기' 콜백이 이루어지지 않습니다.

    Realm에서 managed 객체만 이러한 방식으로 관찰할 수 있습니다. 블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 invalidate() 을 호출합니다.

    콜백 블록 내에서 관찰된 객체에 대한 강력한 참고를 캡처하는 것이 안전합니다. 콜백이 객체 자체가 아닌 반환된 토큰에 의해 유지되므로 유지 주기가 없습니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    선언

    스위프트

    public func observe<T: RLMObjectBase>(on queue: DispatchQueue? = nil,
                                          _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken

    매개변수

    queue

    알림을 수신할 직렬 디스패치 대기열입니다. nil 인 경우 알림이 현재 스레드로 전달됩니다.

    block

    객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.

  • 객체가 변경될 때마다 호출될 블록을 등록합니다.

    managed 객체를 삭제하거나 속성을 기존 값으로 설정하는 자체 할당을 포함하여 객체의 managed 속성을 수정하는 각 쓰기 트랜잭션 (write transaction) 후에는 지정된 행위자의 실행기에서 차단이 비동기적으로 호출됩니다. 요청된 행위자에게 격리된 객체의 복사본이 해당 행위자에서 안전하게 사용할 수 있는 객체의 사본과 변경된 내용에 대한 정보가 블록에 전달됩니다.

    다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.

    Realm에서 managed 객체만 이러한 방식으로 관찰할 수 있습니다. 블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 invalidate() 을 호출합니다.

    기본적으로 객체의 속성을 직접 변경하는 경우에만 알림이 생성되고 연결된 객체에 대한 변경 사항은 생성되지 않습니다. 이는 collection 변경 알림과는 다릅니다. nil이 아니고 비어 있지 않은 키 경로 배열이 전달되는 경우 해당 키 경로로 식별되는 속성의 변경 사항만 변경 알림을 생성합니다. 키 경로는 링크 속성을 순회하여 연결된 객체의 변경 사항에 대한 정보를 받을 수 있습니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    선언

    스위프트

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    @_unsafeInheritExecutor
    public func observe<A: Actor, T: Object>(
        keyPaths: [String]? = nil, on actor: A,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    매개변수

    actor

    알림을 격리할 행위자입니다.

    block

    객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.

  • 객체가 변경될 때마다 호출될 블록을 등록합니다.

    managed 객체를 삭제하거나 속성을 기존 값으로 설정하는 자체 할당을 포함하여 객체의 managed 속성을 수정하는 각 쓰기 트랜잭션 (write transaction) 후에는 지정된 행위자의 실행기에서 차단이 비동기적으로 호출됩니다. 요청된 행위자에게 격리된 객체의 복사본이 해당 행위자에서 안전하게 사용할 수 있는 객체의 사본과 변경된 내용에 대한 정보가 블록에 전달됩니다.

    다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.

    Realm에서 managed 객체만 이러한 방식으로 관찰할 수 있습니다. 블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 invalidate() 을 호출합니다.

    기본적으로 객체의 속성을 직접 변경하는 경우에만 알림이 생성되고 연결된 객체에 대한 변경 사항은 생성되지 않습니다. 이는 collection 변경 알림과는 다릅니다. nil이 아니고 비어 있지 않은 키 경로 배열이 전달되는 경우 해당 키 경로로 식별되는 속성의 변경 사항만 변경 알림을 생성합니다. 키 경로는 링크 속성을 순회하여 연결된 객체의 변경 사항에 대한 정보를 받을 수 있습니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    선언

    스위프트

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    @_unsafeInheritExecutor
    public func observe<A: Actor, T: Object>(
        keyPaths: [PartialKeyPath<T>], on actor: A,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    매개변수

    actor

    알림을 격리할 행위자입니다.

    block

    객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.

비교

  • 두 Realm 객체가 동일한지 여부를 반환합니다.

    객체는 동일한 Realm에서 managed되고 데이터베이스에서 동일한 기본 객체를 점하는 경우에만 동일한 것으로 간주됩니다.

    참고

    동등성 비교는 isEqual(_:) 에 의해 구현됩니다. Realm 객체 유형이 기본 키로 정의된 경우 isEqual(_:) 는 이 메서드와 동일하게 작동합니다. Realm 객체 유형이 기본 키로 정의되지 않은 경우 isEqual(_:)NSObject 객체 ID를 비교하는 동작을 사용합니다. 이 메서드는 Realm 객체 유형이 기본 키를 정의하는지 여부에 관계없이 두 객체를 비교하여 데이터베이스가 동일한지 확인할 수 있습니다.

    선언

    스위프트

    public func isSameObject(as object: EmbeddedObject?) -> Bool

    매개변수

    object

    수신자를 비교할 객체입니다.

  • 이 객체가 동결되었는지 여부를 나타냅니다.

    ~를 참조하세요.

    Object.freeze()

    선언

    스위프트

    public var isFrozen: Bool { get }
  • 이 객체의 동결(불변) 스냅샷을 반환합니다.

    동결 복사본은 변경이 불가능한 객체로 이 객체가 현재 포함하고 있는 것과 동일한 데이터를 포함하지만 포함된 Realm에 기록할 때 업데이트되지 않습니다. 라이브 객체와 달리 동결 객체는 모든 스레드에서 액세스할 수 있습니다.

    경고

    Realm에서 쓰기 트랜잭션(write transaction)을 수행하는 동안 동결된 객체를 오랫동안 유지하면 Realm 파일 크기가 커질 수 있습니다. 자세한 내용은 Realm.Configuration.maximumNumberOfActiveVersions 를 참조하세요.

    경고

    이 메서드는 managed 객체에 대해서만 호출할 수 있습니다.

    선언

    스위프트

    public func freeze() -> Self
  • 이 객체의 라이브(변경 가능) 참고를 반환합니다.

    이 메서드는 동일한 동결된 객체의 라이브 복사본에 대한 managed 접근자를 만듭니다. 이미 라이브 객체에 대해 호출되면 자체를 반환합니다.

    선언

    스위프트

    public func thaw() -> `Self`?