ProjectionObservable

public protocol ProjectionObservable : AnyObject, ThreadConfined

삭제된 유형의 프로젝션입니다.

ProjectionObservable은 결합 출판사입니다.

ProjectionObservable

  • 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 되지 않습니다(여기서 someFriendfriends에 포함된 요소임).

    참고

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

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

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

    블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 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 되지 않습니다(여기서 someFriendfriends에 포함된 요소임).

    참고

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

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

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

    블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 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 되지 않습니다(여기서 someFriendfriends에 포함된 요소임).

    알림은 해당 행위자 실행기에서 지정된 행위자와 격리된 함수에 전달됩니다. 행위자가 차단 작업을 수행하는 경우 여러 알림이 단일 알림으로 통합될 수 있습니다.

    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 되지 않습니다(여기서 someFriendfriends에 포함된 요소임).

    알림은 해당 행위자 실행기에서 지정된 행위자와 격리된 함수에 전달됩니다. 행위자가 차단 작업을 수행하는 경우 여러 알림이 단일 알림으로 통합될 수 있습니다.

    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

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

    반환 값

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