ProjectionObservable
public protocol ProjectionObservable : AnyObject, ThreadConfined
삭제된 유형의 프로젝션입니다.
ProjectionObservable은 결합 출판사입니다.
-
프로젝션의 기본 유형 - Realm
Object
또는EmbeddedObject
의 하위 유형입니다.선언
Swift
associatedtype Root : RLMObjectBase
-
프로젝션되는 객체
선언
Swift
var rootObject: Root { get }
-
observe(keyPaths:
확장 메서드on: _: ) 프로젝션의 기본 객체 가 변경될 때마다 호출될 차단 을 등록합니다.
블록은 기본 객체를 삭제하거나 속성을 기존 값으로 설정하는 자체 할당을 포함하여 객체의 프로젝션된 속성을 수정하는 각 쓰기 트랜잭션(write transaction) 후에 비동기적으로 호출됩니다.
다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.
키 경로가 제공되지 않으면 중첩된 연결된 객체의 프로젝션된 속성을 포함하여 모든 프로젝션된 속성에 대한 삽입, 수정 또는 삭제할 때 차단 이 실행됩니다. 키 경로가 하나 이상 제공되면 제공된 키 경로에서만 발생하는 변경에 대해 차단 이 호출됩니다. 예를 예시 다음과 같은 경우입니다.
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: ["name"], { changes in // ... })
- 위의 알림 차단 은 프로젝션의 기본
Person
객체의Person.firstName
속성 이 변경된 경우 실행되지만Person.lastName
또는Person.friends
목록에 대한 변경 사항에 대해서는 실행되지 않습니다. - 알림 차단 은
PersonProjection.name
속성 변경에 대해 실행되지만 다른 프로젝션의 속성 변경에 대해서는 실행되지 않습니다. 관찰된 키 경로가
["firstFriendsName"]
인 경우friends
목록의firstName
를 삽입, 삭제 또는 수정하면 차단 이 trigger 됩니다.someFriend.lastName
을(를) 변경해도 차단 이 trigger 되지 않습니다(여기서someFriend
는friends
에 포함된 요소임).
참고
별도의 키 경로를 필터링하는 동일한 객체의 여러 알림 토큰은 독점적으로 필터링 되지 않습니다 . 하나의 알림 토큰에 대해 하나의 키 경로 변경이 충족되면 해당 객체에 대한 모든 알림 토큰 차단이 실행됩니다.
대기열이 제공되지 않으면 표준 이벤트 루프를 통해 알림이 전달되므로 이벤트 루프가 다른 활동에 의해 차단되는 동안에는 알림을 전달할 수 없습니다. 대기열이 제공되면 대신 해당 대기열로 알림이 전달됩니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.
List
및Results
과 달리 새 알림 차단을 추가한 후에는 '초기' 콜백이 이루어지지 않습니다.블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서
invalidate()
을 호출합니다.콜백 블록 내에서 관찰된 객체에 대한 강력한 참고를 캡처하는 것이 안전합니다. 콜백이 객체 자체가 아닌 반환된 토큰에 의해 유지되므로 유지 주기가 없습니다.
경고
쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.경고
원래 속성 이 동일한 루트 속성 이름을 가진 프로젝션된 속성의 경우 변경 사항이 둘 중 하나만 해당하더라도 각 프로젝션된 속성에 대해
PropertyChange
가 trigger 됩니다. 다음Projection
객체 "`swift 클래스 PersonProjection: Projection{ @Projected(\Person.firstName) var name @Projected(\Person.address .country) 주소 주소(\Person.address .phone.number) mobile } let token = projectedPerson.observe { changes in if case .change(_, let propertyChanges) = changes { propertyChanges[0].newValue as? String, "Winterfell" // Will notify the new value propertyChanges[1].newValue as? String, "555-555-555" // Will notify with the current value, which hasn't change. } }) try realm.write { person.address.country = "Winterfell" } ```
선언
Swift
public func observe(keyPaths: [String]? = nil, on queue: DispatchQueue? = nil, _ block: @escaping (ObjectChange<Self>) -> Void) -> NotificationToken
매개변수
keyPaths
키 경로 배열 에 포함된 속성만 수정될 때 차단 을 trigger 합니다.
nil
인 경우 객체 의 모든 예상 속성 변경에 대해 알림 이 전달됩니다. 유효한 프로젝션 속성 에 해당하지 않는 string 키 경로는 예외를 발생시킵니다.queue
알림을 수신할 직렬 디스패치 대기열입니다.
nil
인 경우 알림이 현재 스레드로 전달됩니다.block
객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.
반환 값
업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.
- 위의 알림 차단 은 프로젝션의 기본
-
observe(keyPaths:
확장 메서드on: _: ) 프로젝션의 기본 객체 가 변경될 때마다 호출될 차단 을 등록합니다.
블록은 기본 객체를 삭제하거나 속성을 기존 값으로 설정하는 자체 할당을 포함하여 객체의 프로젝션된 속성을 수정하는 각 쓰기 트랜잭션(write transaction) 후에 비동기적으로 호출됩니다.
다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.
키 경로가 제공되지 않으면 중첩된 연결된 객체의 프로젝션된 속성을 포함하여 모든 프로젝션된 속성에 대한 삽입, 수정 또는 삭제할 때 차단 이 실행됩니다. 키 경로가 하나 이상 제공되면 제공된 키 경로에서만 발생하는 변경에 대해 차단 이 호출됩니다. 예를 예시 다음과 같은 경우입니다.
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: [\PersonProjection.name], { changes in // ... })
- 위의 알림 차단 은 객체의
firstName
속성 이 변경될 경우 실행되지만lastName
또는friends
목록에 대한 변경 사항에 대해서는 실행되지 않습니다. 관찰된 키 경로가
[\PersonProjection.firstFriendsName]
인 경우friends
목록의firstName
를 삽입, 삭제 또는 수정하면 차단 이 trigger 됩니다.someFriend.lastName
을(를) 변경해도 차단 이 trigger 되지 않습니다(여기서someFriend
는friends
에 포함된 요소임).
참고
별도의 키 경로를 필터링하는 동일한 객체의 여러 알림 토큰은 독점적으로 필터링 되지 않습니다 . 하나의 알림 토큰에 대해 하나의 키 경로 변경이 충족되면 해당 객체에 대한 모든 알림 토큰 차단이 실행됩니다.
대기열이 제공되지 않으면 표준 이벤트 루프를 통해 알림이 전달되므로 이벤트 루프가 다른 활동에 의해 차단되는 동안에는 알림을 전달할 수 없습니다. 대기열이 제공되면 대신 해당 대기열로 알림이 전달됩니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다.
List
및Results
과 달리 새 알림 차단을 추가한 후에는 '초기' 콜백이 이루어지지 않습니다.블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서
invalidate()
을 호출합니다.콜백 블록 내에서 관찰된 객체에 대한 강력한 참고를 캡처하는 것이 안전합니다. 콜백이 객체 자체가 아닌 반환된 토큰에 의해 유지되므로 유지 주기가 없습니다.
경고
쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.선언
Swift
public func observe(keyPaths: [PartialKeyPath<Self>], on queue: DispatchQueue? = nil, _ block: @escaping (ObjectChange<Self>) -> Void) -> NotificationToken
매개변수
keyPaths
키 경로 배열 에 포함된 속성만 수정될 때 차단 을 trigger 합니다.
nil
인 경우 객체 의 모든 예상 속성 변경에 대해 알림 이 전달됩니다. 유효한 프로젝션 속성 에 해당하지 않는 string 키 경로는 예외를 발생시킵니다.queue
알림을 수신할 직렬 디스패치 대기열입니다.
nil
인 경우 알림이 현재 스레드로 전달됩니다.block
객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.
반환 값
업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.
- 위의 알림 차단 은 객체의
-
observe(keyPaths:
확장 메서드, 비동기on: _: ) 프로젝션의 기본 객체 가 변경될 때마다 호출될 차단 을 등록합니다.
차단 은 기본 객체 를 삭제하거나 속성 을 기존 값으로 설정하다 하는 자체 할당을 포함하여 객체 의 프로젝션된 속성을 수정하는 각 쓰기 트랜잭션 (write transaction) (write transaction) 후에 행위자에 대해 비동기적으로 호출됩니다.
다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.
키 경로가 제공되지 않으면 중첩된 연결된 객체의 프로젝션된 속성을 포함하여 모든 프로젝션된 속성에 대한 삽입, 수정 또는 삭제할 때 차단 이 실행됩니다. 키 경로가 하나 이상 제공되면 제공된 키 경로에서만 발생하는 변경에 대해 차단 이 호출됩니다. 예를 예시 다음과 같은 경우입니다.
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: ["name"], { changes in // ... })
- 위의 알림 차단 은 프로젝션의 기본
Person
객체의Person.firstName
속성 이 변경된 경우 실행되지만Person.lastName
또는Person.friends
목록에 대한 변경 사항에 대해서는 실행되지 않습니다. - 알림 차단 은
PersonProjection.name
속성 변경에 대해 실행되지만 다른 프로젝션의 속성 변경에 대해서는 실행되지 않습니다. - 관찰된 키 경로가
["firstFriendsName"]
인 경우friends
목록의firstName
를 삽입, 삭제 또는 수정하면 차단 이 trigger 됩니다.someFriend.lastName
을(를) 변경해도 차단 이 trigger 되지 않습니다(여기서someFriend
는friends
에 포함된 요소임).
알림은 해당 행위자 실행기에서 지정된 행위자와 격리된 함수에 전달됩니다. 행위자가 차단 작업을 수행하는 경우 여러 알림이 단일 알림으로 통합될 수 있습니다.
Collection 알림 과 달리 '초기' 알림이 없으며 이 함수가 반환되는 시점과 변경 사항이 처음 캡처되는 시점 사이에 간격이 없습니다.
블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서
invalidate()
을 호출합니다.경고
쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.선언
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor public func observe<A: Actor>( keyPaths: [String]? = nil, on actor: A, _ block: @Sendable @escaping (isolated A, ObjectChange<Self>) -> Void ) async -> NotificationToken
매개변수
keyPaths
키 경로 배열 에 포함된 속성만 수정될 때 차단 을 trigger 합니다.
nil
인 경우 객체 의 모든 예상 속성 변경에 대해 알림 이 전달됩니다. 유효한 프로젝션 속성 에 해당하지 않는 string 키 경로는 예외를 발생시킵니다.actor
알림이 전달될 액터입니다. 차단은 이 행위자에게 격리된 매개변수로 전달되므로 콜백 내에서 행위자에 동기적으로 액세스할 수 있습니다.
block
객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.
반환 값
업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.
- 위의 알림 차단 은 프로젝션의 기본
-
observe(keyPaths:
확장 메서드, 비동기on: _: ) 프로젝션의 기본 객체 가 변경될 때마다 호출될 차단 을 등록합니다.
차단 은 기본 객체 를 삭제하거나 속성 을 기존 값으로 설정하다 하는 자체 할당을 포함하여 객체 의 프로젝션된 속성을 수정하는 각 쓰기 트랜잭션 (write transaction) (write transaction) 후에 행위자에 대해 비동기적으로 호출됩니다.
다른 스레드 또는 다른 프로세스에서 수행되는 쓰기 트랜잭션 (write transaction)의 경우 관리 Realm이 변경 사항이 포함된 버전으로 (자동)새로 고침될 때 블록이 호출되는 반면, 로컬 쓰기 트랜잭션 (write transaction)의 경우 다음과 같은 미래의 어느 점에 블록이 호출됩니다. 쓰기 트랜잭션 (write transaction)이 커밋됩니다.
키 경로가 제공되지 않으면 중첩된 연결된 객체의 프로젝션된 속성을 포함하여 모든 프로젝션된 속성에 대한 삽입, 수정 또는 삭제할 때 차단 이 실행됩니다. 키 경로가 하나 이상 제공되면 제공된 키 경로에서만 발생하는 변경에 대해 차단 이 호출됩니다. 예를 예시 다음과 같은 경우입니다.
class Person: Object { @Persisted var firstName: String @Persisted var lastName = "" @Persisted public var friends: List<Person> } class PersonProjection: Projection<Person> { @Projected(\Person.firstName) var name @Projected(\Person.lastName.localizedUppercase) var lastNameCaps @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String> } let token = projectedPerson.observe(keyPaths: [\PersonProjection.name], { changes in // ... })
- 위의 알림 차단 은 프로젝션의 기본
Person
객체의Person.firstName
속성 이 변경된 경우 실행되지만Person.lastName
또는Person.friends
목록에 대한 변경 사항에 대해서는 실행되지 않습니다. - 알림 차단 은
PersonProjection.name
속성 변경에 대해 실행되지만 다른 프로젝션의 속성 변경에 대해서는 실행되지 않습니다. - 관찰된 키 경로가
[\.firstFriendsName]
인 경우friends
목록의firstName
를 삽입, 삭제 또는 수정하면 차단 이 trigger 됩니다.someFriend.lastName
을(를) 변경해도 차단 이 trigger 되지 않습니다(여기서someFriend
는friends
에 포함된 요소임).
알림은 해당 행위자 실행기에서 지정된 행위자와 격리된 함수에 전달됩니다. 행위자가 차단 작업을 수행하는 경우 여러 알림이 단일 알림으로 통합될 수 있습니다.
Collection 알림 과 달리 '초기' 알림이 없으며 이 함수가 반환되는 시점과 변경 사항이 처음 캡처되는 시점 사이에 간격이 없습니다.
블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서
invalidate()
을 호출합니다.경고
쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.선언
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor public func observe<A: Actor>( keyPaths: [PartialKeyPath<Self>], on actor: A, _ block: @Sendable @escaping (isolated A, ObjectChange<Self>) -> Void ) async -> NotificationToken
매개변수
keyPaths
키 경로 배열 에 포함된 속성만 수정될 때 차단 을 trigger 합니다.
nil
인 경우 객체 의 모든 예상 속성 변경에 대해 알림 이 전달됩니다. 유효한 프로젝션 속성 에 해당하지 않는 string 키 경로는 예외를 발생시킵니다.actor
알림이 전달될 액터입니다. 차단은 이 행위자에게 격리된 매개변수로 전달되므로 콜백 내에서 행위자에 동기적으로 액세스할 수 있습니다.
block
객체 변경 사항에 대한 정보를 사용하여 호출할 차단입니다.
반환 값
업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.
- 위의 알림 차단 은 프로젝션의 기본