결과

@frozen
public struct Results<Element> : Equatable, RealmCollectionImpl where Element : RealmCollectionValue
extension Results: RealmSubscribable
extension Results: Encodable where Element: Encodable

Results 객체 쿼리에서 반환되는 Realm의 자동 업데이트 container 유형입니다.

Results List<Element> 와(과) 동일한 조건자를 사용하여 쿼리할 수 있으며, 쿼리를 연결하여 쿼리 결과를 추가로 필터링할 수 있습니다.

Results 현재 스레드에서 쓰기 트랜잭션(write transaction)을 포함하여 항상 현재 스레드에서 Realm의 현재 상태를 반영합니다. 한 가지 예외는 for...in 열거를 사용하는 경우이며, 이는 열거 중에 필터에 의해 제외되도록 일부 객체가 삭제되거나 수정되더라도 열거가 시작될 때 쿼리와 일치하는 객체를 항상 열거합니다.

Results 처음 액세스할 때 느리게 평가됩니다. 쿼리 결과가 요청될 때만 쿼리를 실행합니다. 즉, 여러 개의 임시 Results 를 연결하여 데이터를 정렬하고 필터링해도 중간 상태를 처리하는 불필요한 작업을 수행하지 않습니다.

결과가 평가되거나 알림 차단이 추가되면 결과가 최신 상태로 유지되며 가능하면 백그라운드 스레드에서 최신 상태로 유지하기 위한 작업이 수행됩니다.

결과 인스턴스는 직접 인스턴스화할 수 없습니다.

  • 결과가 나타내는 객체에 대한 사람이 읽을 수 있는 설명입니다.

    선언

    스위프트

    public var description: String { get }

객체 조회

  • 지정된 index 위치에 객체를 반환합니다.

    선언

    스위프트

    public subscript(position: Int) -> Element { get }

    매개변수

    index

    인덱스입니다.

Equatable

  • 선언

    스위프트

    public static func == (lhs: Results<Element>, rhs: Results<Element>) -> Bool

유연한 동기화

  • 결과의 로컬 쿼리와 일치하는 SyncSubscription을 만듭니다. Realm의 로컬 구독 세트에 대한 구독을 커밋한 후 메서드는 WaitForSyncMode 에 따라 다운로드를 기다립니다.

    이름 없는 구독

    쿼리가 명명되지 않은 구독과 일치하는 .subscribe() 가 이름 없이 호출되면 다른 구독이 생성되지 않습니다.

    쿼리가 명명된 구독과 일치하는 이름 없이 .subscribe() 가 호출되면 명명되지 않은 추가 구독이 생성됩니다.

    명명된 구독

    쿼리가 명명되지 않은 구독과 일치하는 이름으로 .subscribe() 를 호출하면 명명된 구독이 추가로 생성됩니다.

    기존 이름 및 쿼리

    다른 쿼리에서 사용된 이름의 .subscribe() 가 호출되면 이전 구독이 새 쿼리로 업데이트됩니다.

    동일한 쿼리에서 이미 사용 중인 이름으로 .subscribe() 를 호출하면 새 구독이 생성되지 않습니다.

    참고

    이 메서드는 WaitForSyncMode.always.onCreation (구독이 처음 생성된 경우)을 사용하는 경우 반환하기 전에 모든 데이터가 다운로드될 때까지 기다립니다. 시간 제한이 설정되지 않은 경우 인터넷 연결이 필요합니다.

    참고

    이 메서드는 구독을 생성하거나 업데이트하는 업데이트 트랜잭션을 엽니다. 여러 개의 구독을 생성하기 위해 이 메서드를 반복 사용 하지 않는 것이 좋습니다. 이로 인해 불필요한 업데이트 트랜잭션이 여러 개 열려 성능 병목 현상이 발생할 수 있습니다. 한 번에 여러 개의 구독을 만들려면 SyncSubscription.update 을(를) 사용합니다.

    경고

    이 함수는 메인 스레드 및 행위자 격리 Realms에서만 지원됩니다.

    경고

    이 API는 현재 Preview 에 있으며 향후 변경될 수 있습니다.

    선언

    스위프트

    @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
    @_unsafeInheritExecutor
    public func subscribe(name: String? = nil, waitForSync: WaitForSyncMode = .onCreation, timeout: TimeInterval? = nil) async throws -> Results<Element>

    매개변수

    name

    구독에 적용된 이름

    waitForSync

    WaitForSyncMode 구독의 다운로드 동작을 결정합니다. 기본값은 .onCreation 입니다.

    timeout

    선택적 클라이언트 시간 초과입니다. 이 시간이 지나면 클라이언트는 구독 다운로드 대기를 취소합니다. 이 시간 제한에 도달한다고 해서 서버 오류가 발생한 것은 아닙니다.

    반환 값

    self을(를) 반환합니다.

  • 결과의 로컬 필터와 일치하는 SyncSubscription을 제거합니다.

    이 메서드는 Realm의 로컬 구독 세트에 대한 구독 제거를 커밋한 후 반환됩니다. 이 메서드를 호출하면 객체가 영역에서 제거될 때까지 기다리지 않습니다.

    명명된 구독을 제거하려면 결과에 이전에 구독이 생성되어 있어야 합니다. 예를 들면 다음과 같습니다.

    let results1 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(name: "adults")
    let results2 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(name: "overOne")
    let results3 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe()
    // This will unsubscribe from the subscription named "overOne". The "adults" and unnamed
    // subscription still remain.
    results2.unsubscribe()
    

    참고

    이 메서드는 구독을 제거하는 업데이트 트랜잭션을 엽니다. 이 방법을 사용하여 서버에 대한 여러 구독 변경 사항을 배치 하지 않는 것이 좋습니다. 한 번에 여러 개의 구독을 취소하려면 SyncSubscription.update 을(를) 사용합니다.

    경고

    결과에서 구독 취소를 호출해도 Results 에서 로컬 필터가 제거되지는 않습니다. 구독 취소를 호출한 후에도 Realm의 구독 세트에 다른 구독이 있을 수 있으므로 결과에 여전히 객체가 포함될 수 있습니다.

    경고

    이 API는 현재 Preview 에 있으며 향후 변경될 수 있습니다.

    선언

    스위프트

    public func unsubscribe()

결과

  • collection이 변경될 때마다 Void를 방출하는 출판사입니다.

    이름과 달리 실제로 collection 변경된 후에 방출합니다.

    선언

    스위프트

    public var objectWillChange: RealmPublishers.WillChange<Results> { get }