출판사

extension Publisher
extension Publisher where Output: ThreadConfined
  • 업스트림 출판사에서 내보낸 모든 Realm 객체 및 collection을 동결합니다.

    Realm 객체를 동결하면 Realm에 쓰기가 수행될 때 더 이상 실시간 업데이트되지 않고 .threadSafeReference() 을 사용하지 않고도 스레드 간에 자유롭게 전달하는 것이 안전합니다.

    // Get a publisher for a Results
    let cancellable = myResults.publisher
       // Convert to frozen Results
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { frozenResults in
           // Do something with the frozen Results
       }
    

    선언

    Swift

    public func freeze<T>() -> Publishers.Map<Self, T> where T : ThreadConfined, T == Self.Output

    반환 값

    업스트림 출판사가 게시하는 객체의 동결된 사본을 게시하는 출판사입니다.

  • 업스트림 발행자가 내보낸 모든 Realm 객체 변경 세트를 동결합니다.

    Realm 객체 변경 세트를 동결하면 Realm 에 쓰기가 수행될 때 포함된 객체 참조가 더 이상 실시간 업데이트되지 않으며 .threadSafeReference() 을 사용하지 않고도 스레드 간에 자유롭게 전달할 수 있습니다. 또한 창 세트에 포함된 동결된 객체 가 항상 속성 변경 사항과 일치하도록 보장 하는데, 이는 스레드 세이프 참조를 사용할 때 항상 그런 것은 아닙니다.

    // Get a changeset publisher for an object
    let cancellable = changesetPublisher(object)
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    선언

    Swift

    public func freeze<T>() -> Publishers.Map<Self, ObjectChange<T>> where T : Object, Self.Output == ObjectChange<T>

    반환 값

    업스트림 출판사가 게시하는 변경 세트의 동결된 사본을 게시하는 출판사입니다.

  • 업스트림 발행자의 모든 Realm collection 변경 세트를 동결합니다.

    Realm 컬렉션 변경 세트를 동결하면 Realm 에 쓰기가 수행될 때 포함된 컬렉션 참조가 더 이상 실시간 업데이트되지 않으며 .threadSafeReference() 을 사용하지 않고도 스레드 간에 자유롭게 전달할 수 있습니다. 또한 창 세트에 포함된 동결된 컬렉션 이 항상 변경 정보와 일치하도록 보장 하는데, 이는 스레드 세이프 참조를 사용할 때 항상 그런 것은 아닙니다.

    // Get a changeset publisher for a collection
    let cancellable = myList.changesetPublisher
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    선언

    Swift

    public func freeze<T: RealmCollection>()
        -> Publishers.Map<Self, RealmCollectionChange<T>> where Output == RealmCollectionChange<T>

    반환 값

    업스트림 출판사가 게시하는 변경 세트의 동결된 사본을 게시하는 출판사입니다.

  • 업스트림 발행자의 모든 Realm collection 변경 세트를 동결합니다.

    Realm 컬렉션 변경 세트를 동결하면 Realm 에 쓰기가 수행될 때 포함된 컬렉션 참조가 더 이상 실시간 업데이트되지 않으며 .threadSafeReference() 을 사용하지 않고도 스레드 간에 자유롭게 전달할 수 있습니다. 또한 창 세트에 포함된 동결된 컬렉션 이 항상 변경 정보와 일치하도록 보장 하는데, 이는 스레드 세이프 참조를 사용할 때 항상 그런 것은 아닙니다.

    // Get a changeset publisher for a collection
    let cancellable = myMap.changesetPublisher
       // Convert to frozen changesets
       .freeze()
       // Unlike live objects, frozen objects can be sent to a concurrent queue
       .receive(on: DispatchQueue.global())
       .sink { changeset in
           // Do something with the frozen changeset
       }
    

    선언

    Swift

    public func freeze<T: RealmKeyedCollection>()
        -> Publishers.Map<Self, RealmMapChange<T>> where Output == RealmMapChange<T>

    반환 값

    업스트림 출판사가 게시하는 변경 세트의 동결된 사본을 게시하는 출판사입니다.

결합

  • 객체 변경 집합을 다른 디스패치 대기열로 전달할 수 있습니다.

    Realm 스레드에 제한된 객체를 방출하는 출판사에서 receive(on:) 에 대한 각 호출은 .threadSafeReference() 호출로 진행해야 합니다. 반환된 출판사는 스레드에 한정된 객체를 새 대기열로 전달하는 데 필요한 로직을 처리합니다. 직렬 디스패치 대기열만 지원되며 다른 스케줄러를 사용하면 치명적인 오류가 발생합니다.

    예를 들어, 백그라운드 스레드에서 구독하려면 해당 스레드에서 몇 가지 작업을 수행한 다음 객체 변경 집합을 메인 스레드에 전달하면 됩니다.

    let cancellable = changesetPublisher(myObject)
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { objectChange in
            // Do things with the object on the main thread
        }
    

    선언

    Swift

    public func threadSafeReference<T: Object>()
        -> RealmPublishers.MakeThreadSafeObjectChangeset<Self, T> where Output == ObjectChange<T>

    반환 값

    스레드에 제한된 객체에 대해 receive(on:) 를 지원하는 출판사입니다.

  • Realm collection 변경 세트를 다른 디스패치 대기열로 전달할 수 있습니다.

    Realm 스레드에 제한된 객체를 방출하는 출판사에서 receive(on:) 에 대한 각 호출은 .threadSafeReference() 호출로 진행해야 합니다. 반환된 출판사는 스레드에 한정된 객체를 새 대기열로 전달하는 데 필요한 로직을 처리합니다. 직렬 디스패치 대기열만 지원되며 다른 스케줄러를 사용하면 치명적인 오류가 발생합니다.

    예를 들어 백그라운드 스레드에서 구독하려면 해당 스레드에서 몇 가지 작업을 수행한 다음 collection 변경 집합을 메인 스레드에 전달하면 됩니다.

    let cancellable = myCollection.changesetPublisher
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { collectionChange in
            // Do things with the collection on the main thread
        }
    

    선언

    Swift

    public func threadSafeReference<T: RealmCollection>()
        -> RealmPublishers.MakeThreadSafeCollectionChangeset<Self, T> where Output == RealmCollectionChange<T>

    반환 값

    스레드에 제한된 객체에 대해 receive(on:) 를 지원하는 출판사입니다.

  • Realm collection 변경 세트를 다른 디스패치 대기열로 전달할 수 있습니다.

    Realm 스레드에 제한된 객체를 방출하는 출판사에서 receive(on:) 에 대한 각 호출은 .threadSafeReference() 호출로 진행해야 합니다. 반환된 출판사는 스레드에 한정된 객체를 새 대기열로 전달하는 데 필요한 로직을 처리합니다. 직렬 디스패치 대기열만 지원되며 다른 스케줄러를 사용하면 치명적인 오류가 발생합니다.

    예를 들어 백그라운드 스레드에서 구독하려면 해당 스레드에서 몇 가지 작업을 수행한 다음 collection 변경 집합을 메인 스레드에 전달하면 됩니다.

    let cancellable = myCollection.changesetPublisher
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { collectionChange in
            // Do things with the collection on the main thread
        }
    

    선언

    Swift

    public func threadSafeReference<T: RealmKeyedCollection>()
        -> RealmPublishers.MakeThreadSafeKeyedCollectionChangeset<Self, T> where Output == RealmMapChange<T>

    반환 값

    스레드에 제한된 객체에 대해 receive(on:) 를 지원하는 출판사입니다.

Output: ThreadConfined에서 사용 가능

  • 스레드에 한정된 객체를 다른 디스패치 대기열로 전달할 수 있습니다.

    Realm 스레드에 한정된 객체를 방출하는 발행자에서 에 대한 각 호출은 에 대한 호출로 진행되어야 receive(on:) .threadSafeReference() 합니다. 반환된 발행자는 스레드에 한정된 객체를 새 대기열에 전달하는 데 필요한 로직을 처리합니다. 직렬 디스패치 대기열만 지원되며 다른 스케줄러를 사용하면 치명적인 오류가 발생합니다.

    예를 들어, 백그라운드 스레드에서 구독하려면 해당 스레드에서 몇 가지 작업을 수행한 다음 객체를 메인 스레드에 전달하면 됩니다.

    let cancellable = publisher(myObject)
        .subscribe(on: DispatchQueue(label: "background queue")
        .print()
        .threadSafeReference()
        .receive(on: DispatchQueue.main)
        .sink { object in
            // Do things with the object on the main thread
        }
    

    동결되거나 관리되지 않는 객체를 방출하는 출판사에서 이 함수를 호출하는 것은 불필요하지만 허용됩니다.

    선언

    Swift

    public func threadSafeReference() -> RealmPublishers.MakeThreadSafe<Self>

    반환 값

    스레드에 제한된 객체에 대해 receive(on:) 를 지원하는 출판사입니다.