객체

extension Object
extension Object: @retroactive ObservableObject
extension Object: _RealmCollectionValueInsideOptional
extension Object: ThreadConfined

이니셜라이저

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

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

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

    Realm 인스턴스에서 add(_:) 를 호출하여 관리되지 않는 객체를 해당 Realm에 추가합니다.

    선언

    Swift

    public convenience init(value: Any)

    매개변수

    value

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

속성

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

    선언

    Swift

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

    선언

    Swift

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

    객체를 managed Realm에서 객체가 삭제되었거나 해당 Realm에서 invalidate() 이(가) 호출된 경우 객체에 더 이상 액세스할 수 없습니다. 이 속성은 키-값으로 관찰 가능합니다.

    선언

    Swift

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

    선언

    Swift

    open override var description: String { get }

객체 사용자 지정

  • 기본 키로 사용할 속성의 이름을 지정하려면 이 메서드를 재정의합니다.

    String, Int, ObjectId , UUID 유형의 속성만 기본 키로 지정할 수 있습니다. 기본 키 속성은 속성이 설정될 때마다 각 값에 고유성을 적용하므로 약간의 오버헤드가 발생합니다. 인덱스는 기본 키 속성에 대해 자동으로 생성됩니다.

    경고

    이 함수는 @objc 를 사용하는 레거시 속성 선언에만 적용됩니다. @Persisted 을(를) 사용할 때는 @Persisted(primaryKey: true) 를 대신 사용합니다.

    선언

    Swift

    @objc
    open class func primaryKey() -> String?

    반환 값

    기본 키로 지정된 속성의 이름이거나, 모델에 기본 키가 없는 경우 nil 입니다.

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

    경고

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

    선언

    Swift

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

    반환 값

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

  • 인덱스화해야 하는 속성의 속성 이름 배열을 반환합니다.

    문자열, 정수, 부울, DateNSDate 속성만 지원됩니다.

    경고

    이 함수는 @objc 를 사용하는 레거시 속성 선언에만 적용됩니다. @Persisted 을(를) 사용할 때는 @Persisted(indexed: true) 를 대신 사용합니다.

    선언

    Swift

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

    반환 값

    속성 이름의 배열입니다.

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

    class Person: Object {
        @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"]
        }
    }
    

    참고

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

    참고

    마이그레이션 블록에서 공개/비공개 이름으로 이전 속성을 열거할 때 속성 값을 검색하기 위해 공개 이름 대신 이전 열 이름을 사용해야 합니다.
    let migrationBlock = { migration, oldSchemaVersion in
        migration.enumerateObjects(ofType: "Person", { oldObj, newObj in
           let oldPropertyValue = oldObj!["first_name"] as! String
           // Use this value in migration
        })
    }
    

    속성 이름을 바꿀 때도 이 작업을 수행해야 합니다.

    let migrationBlock = { migration, oldSchemaVersion in
        migration.renameProperty(onType: "Person", from: "first_name", to: "complete_name")
    }
    

    선언

    Swift

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

    반환 값

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

키-값 코딩 & 구독

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

    선언

    Swift

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

알림

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

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

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

    키 경로가 제공되지 않으면 객체의 모든 첫 번째 수준 속성에 대해 삽입, 수정 또는 삭제할 때 차단이 실행됩니다. Object 알림은 기본적으로 단순 알림이므로 해당 속성의 키 경로가 지정되지 않는 한 중첩된 속성을 수정해도 알림이 trigger되지 않습니다. 하나 이상의 키 경로가 제공되면 제공된 키 경로에서만 발생하는 변경에 대해 차단이 호출됩니다. 예를 들어 다음과 같은 경우입니다.

    class Dog: Object {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    
    // ... where `dog` is a managed Dog object.
    dog.observe(keyPaths: ["adopted"], { changes in
       // ...
    })
    
    • 위의 알림 차단은 adopted 속성이 변경될 경우 실행되지만 name 에 대한 변경 사항에 대해서는 실행되지 않습니다.
    • 관찰된 키 경로가 ["siblings"] 인 경우 siblings 목록을 삽입, 삭제 또는 수정하면 차단이 trigger됩니다. someSibling.name 을(를) 변경해도 차단이 trigger 되지 않습니다(여기서 someSiblingsiblings 에 포함된 요소입니다).
    • 관찰된 키 경로가 ["siblings.name"] 인 경우 siblings 목록을 삽입하거나 삭제하면 차단이 trigger됩니다. siblings 목록에 포함된 객체의 경우, 해당 name 속성을 수정해야만 차단이 trigger됩니다.

    참고

    별도의 키 경로를 필터링하는 동일한 객체의 여러 알림 토큰은 독점적으로 필터링 되지 않습니다 . 하나의 알림 토큰에 대해 하나의 키 경로 변경이 충족되면 해당 객체에 대한 모든 알림 토큰 차단이 실행됩니다.

    대기열이 제공되지 않으면 표준 이벤트 루프를 통해 알림이 전달되므로 이벤트 루프가 다른 활동에 의해 차단되는 동안에는 알림을 전달할 수 없습니다. 대기열이 제공되면 대신 해당 대기열로 알림이 전달됩니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.

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

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

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

    경고

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

    선언

    Swift

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

    매개변수

    keyPaths

    키 경로 배열에 포함된 속성만 수정 시 trigger가 속성됩니다. nil 인 경우 객체의 속성 변경에 대한 알림이 전달됩니다. 유효한 속성에 해당하지 않는 문자열 키 경로는 예외를 발생시킵니다. 연결된 속성에 대한 자세한 내용은 위의 설명을 참조하세요.

    queue

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

    block

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

    반환 값

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

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

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

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

    키 경로가 제공되지 않으면 객체의 모든 첫 번째 수준 속성에 대해 삽입, 수정 또는 삭제할 때 차단이 실행됩니다. Object 알림은 기본적으로 단순 알림이므로 해당 속성의 키 경로가 지정되지 않는 한 중첩된 속성을 수정해도 알림이 trigger되지 않습니다. 하나 이상의 키 경로가 제공되면 제공된 키 경로에서만 발생하는 변경에 대해 차단이 호출됩니다. 예를 들어,

    class Dog: Object {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    
    // ... where `dog` is a managed Dog object.
    dog.observe(keyPaths: [\Dog.adopted], { changes in
       // ...
    })
    
    • 위의 알림 차단은 adopted 속성이 변경될 경우 실행되지만 name 에 대한 변경 사항에 대해서는 실행되지 않습니다.
    • 관찰된 키 경로가 [\Dog.siblings] 인 경우 siblings 목록을 삽입, 삭제 또는 수정하면 차단이 trigger됩니다. someSibling.name 을(를) 변경해도 차단이 trigger 되지 않습니다(여기서 someSiblingsiblings 에 포함된 요소입니다).
    • 관찰된 키 경로가 [\Dog.siblings.name] 인 경우 siblings 목록을 삽입하거나 삭제하면 차단이 trigger됩니다. siblings 목록에 포함된 객체의 경우, 해당 name 속성을 수정해야만 차단이 trigger됩니다.

    참고

    별도의 키 경로를 필터링하는 동일한 객체의 여러 알림 토큰은 독점적으로 필터링 되지 않습니다 . 하나의 알림 토큰에 대해 하나의 키 경로 변경이 충족되면 해당 객체에 대한 모든 알림 토큰 차단이 실행됩니다.

    대기열이 제공되지 않으면 표준 이벤트 루프를 통해 알림이 전달되므로 이벤트 루프가 다른 활동에 의해 차단되는 동안에는 알림을 전달할 수 없습니다. 대기열이 제공되면 대신 해당 대기열로 알림이 전달됩니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.

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

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

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

    경고

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

    선언

    Swift

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

    매개변수

    keyPaths

    키 경로 배열에 포함된 속성만 수정 시 trigger가 속성됩니다. nil 인 경우 객체의 속성 변경에 대한 알림이 전달됩니다. 연결된 속성에 대한 자세한 내용은 위의 설명을 참조하세요.

    queue

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

    block

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

    반환 값

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

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

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

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

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

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

    경고

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

    선언

    Swift

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    public func observe<A: Actor, T: Object>(
        keyPaths: [String]? = nil, on actor: A,
        _isolation: isolated (any Actor)? = #isolation,
        _ 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이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    선언

    Swift

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

    매개변수

    actor

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

    block

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

    반환 값

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

비교

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

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

    참고

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

    선언

    Swift

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

    매개변수

    object

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

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

    ~를 참조하세요.

    Object.freeze()

    선언

    Swift

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

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

    경고

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

    경고

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

    선언

    Swift

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

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

    선언

    Swift

    public func thaw() -> `Self`?