객체
extension Object
extension Object: @retroactive ObservableObject
extension Object: _RealmCollectionValueInsideOptional
extension Object: ThreadConfined
-
객체가 변경될 때마다 Void를 방출하는 출판사입니다.
이름과 달리 실제로 객체가 변경된 후에 방출합니다.
선언
Swift
public var objectWillChange: RealmPublishers.WillChange<Object> { get }
-
Realm 객체의 관리되지 않는 인스턴스를 만듭니다.
value
인수는 객체를 채우는 데 사용됩니다. 키-값 코딩을 준수하는 객체,NSJSONSerialization
의 메서드에서 반환된 배열 또는 사전 또는 각 managed 속성에 대해 하나의 요소를 포함하는Array
일 수 있습니다. 필수 속성이 없고 해당 속성이 기본값으로 정의되지 않은 경우 예외가 발생합니다.Array
를value
인수로 전달할 때 모든 속성이 존재하고 유효해야 하며 모델에 정의된 속성과 동일한 순서여야 합니다.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하지 않습니다.
선언
Swift
@objc open class func ignoredProperties() -> [String]
반환 값
무시할 속성 이름의 배열입니다.
-
인덱스화해야 하는 속성의 속성 이름 배열을 반환합니다.
문자열, 정수, 부울,
Date
및NSDate
속성만 지원됩니다.경고
이 함수는@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 되지 않습니다(여기서someSibling
은siblings
에 포함된 요소입니다). 관찰된 키 경로가
["siblings.name"]
인 경우siblings
목록을 삽입하거나 삭제하면 차단이 trigger됩니다.siblings
목록에 포함된 객체의 경우, 해당name
속성을 수정해야만 차단이 trigger됩니다.
참고
별도의 키 경로를 필터링하는 동일한 객체의 여러 알림 토큰은 독점적으로 필터링 되지 않습니다 . 하나의 알림 토큰에 대해 하나의 키 경로 변경이 충족되면 해당 객체에 대한 모든 알림 토큰 차단이 실행됩니다.
대기열이 제공되지 않으면 표준 이벤트 루프를 통해 알림이 전달되므로 이벤트 루프가 다른 활동에 의해 차단되는 동안에는 알림을 전달할 수 없습니다. 대기열이 제공되면 대신 해당 대기열로 알림이 전달됩니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.
List
및Results
과 달리 새 알림 차단을 추가한 후에는 '초기' 콜백이 이루어지지 않습니다.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 되지 않습니다(여기서someSibling
은siblings
에 포함된 요소입니다). 관찰된 키 경로가
[\Dog.siblings.name]
인 경우siblings
목록을 삽입하거나 삭제하면 차단이 trigger됩니다.siblings
목록에 포함된 객체의 경우, 해당name
속성을 수정해야만 차단이 trigger됩니다.
참고
별도의 키 경로를 필터링하는 동일한 객체의 여러 알림 토큰은 독점적으로 필터링 되지 않습니다 . 하나의 알림 토큰에 대해 하나의 키 경로 변경이 충족되면 해당 객체에 대한 모든 알림 토큰 차단이 실행됩니다.
대기열이 제공되지 않으면 표준 이벤트 루프를 통해 알림이 전달되므로 이벤트 루프가 다른 활동에 의해 차단되는 동안에는 알림을 전달할 수 없습니다. 대기열이 제공되면 대신 해당 대기열로 알림이 전달됩니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.
List
및Results
과 달리 새 알림 차단을 추가한 후에는 '초기' 콜백이 이루어지지 않습니다.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`?