결과

@frozen
public struct Results<Element> : Equatable where Element : RealmCollectionValue
extension Results: RealmSubscribable
extension Results: RealmCollection
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 }
  • 결과에서 설명하는 객체의 유형입니다.

    선언

    스위프트

    public typealias ElementType = Element

속성

  • 이 결과를 관리하는 Realm입니다. 이 속성은 nil 를 반환하지 않습니다.

    선언

    스위프트

    public var realm: Realm? { get }
  • 결과가 더 이상 유효하지 않은지 여부를 나타냅니다.

    포함하는 realm 에서 invalidate() 가 호출되면 결과가 유효하지 않게 됩니다. 무효화된 결과에 액세스할 수 있지만 항상 비어 있습니다.

    선언

    스위프트

    public var isInvalidated: Bool { get }
  • 결과의 객체 수입니다.

    선언

    스위프트

    public var count: Int { get }

인덱스 검색

  • 결과에서 지정된 객체의 인덱스를 반환하거나, 객체가 없는 경우 nil 을 반환합니다.

    선언

    스위프트

    public func index(of object: Element) -> Int?
  • 조건자와 일치하는 첫 번째 객체의 인덱스를 반환하거나, 일치하는 객체가 없는 경우 nil 를 반환합니다.

    선언

    스위프트

    public func index(matching predicate: NSPredicate) -> Int?

    매개변수

    predicate

    객체를 필터링하는 데 사용할 조건자입니다.

객체 조회

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

    선언

    스위프트

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

    매개변수

    index

    인덱스입니다.

  • 결과의 첫 번째 객체를 반환하거나 결과가 비어 있는 경우 nil 을 반환합니다.

    선언

    스위프트

    public var first: Element? { get }
  • 결과의 마지막 객체를 반환하거나 결과가 비어 있는 경우 nil 을 반환합니다.

    선언

    스위프트

    public var last: Element? { get }

KVC

  • 각 결과에 대해 key 를 사용하여 valueForKey(_:) 를 호출한 결과가 포함된 Array 을 반환합니다.

    선언

    스위프트

    public func value(forKey key: String) -> Any?

    매개변수

    key

    값을 원하는 속성의 이름입니다.

  • 각 결과에 대해 keyPath 를 사용하여 valueForKeyPath(_:) 를 호출한 결과가 포함된 Array 을 반환합니다.

    선언

    스위프트

    public func value(forKeyPath keyPath: String) -> Any?

    매개변수

    keyPath

    값을 원하는 속성의 키 경로입니다.

  • 지정된 valuekey 를 사용하여 결과에 표시된 각 객체에 대해 setValue(_:forKey:) 를 호출합니다.

    경고

    이 메서드는 쓰기 트랜잭션(write transaction) 중에만 호출할 수 있습니다.

    선언

    스위프트

    public func setValue(_ value: Any?, forKey key: String)

    매개변수

    value

    객체 값입니다.

    key

    각 객체에 값을 설정해야 하는 속성의 이름입니다.

필터링

  • 컬렉션에서 지정된 조건자와 일치하는 모든 객체를 포함하는 Results 를 반환합니다.

    선언

    스위프트

    public func filter(_ predicate: NSPredicate) -> Results<Element>

    매개변수

    predicate

    객체를 필터링하는 데 사용할 조건자입니다.

정렬

  • 결과에 표시되지만 정렬된 객체를 포함하는 Results 를 반환합니다.

    객체는 지정된 키 경로의 값을 기준으로 정렬됩니다. 예를 들어, Studentcollection을 age 속성을 기준으로 가장 오래된 것부터 가장 오래된 것 순으로 정렬하려면 students.sorted(byKeyPath: "age", ascending: true) 를 호출할 수 있습니다.

    경고

    collection은 부울, Date, NSDate, 단일 및 배정밀도 부동 소수점, 정수, 문자열 유형의 속성을 통해서만 정렬할 수 있습니다.

    선언

    스위프트

    public func sorted(byKeyPath keyPath: String, ascending: Bool = true) -> Results<Element>

    매개변수

    keyPath

    정렬 기준이 되는 키 경로입니다.

    ascending

    정렬할 방향입니다.

  • 결과에 표시되지만 정렬된 객체를 포함하는 Results 를 반환합니다.

    경고

    collection은 부울, Date, NSDate, 단일 및 배정밀도 부동 소수점, 정수, 문자열 유형의 속성을 통해서만 정렬할 수 있습니다.

    ~를 참조하세요.

    sorted(byKeyPath:ascending:)

    선언

    스위프트

    public func sorted<S: Sequence>(by sortDescriptors: S) -> Results<Element>
        where S.Iterator.Element == SortDescriptor

    매개변수

    sortDescriptors

    정렬 기준이 되는 SortDescriptor의 시퀀스입니다.

  • 지정된 키 경로를 기반으로 고유 객체가 포함된 Results 을 반환합니다.

    선언

    스위프트

    public func distinct<S: Sequence>(by keyPaths: S) -> Results<Element>
        where S.Iterator.Element == String

    매개변수

    keyPaths

    사용된 주요 경로는 뚜렷한 결과를 냅니다.

집계 작업

  • 모든 결과 중 지정된 속성의 최소값(가장 낮은 값)을 반환하거나 결과가 비어 있는 경우 nil 을 반환합니다.

    경고

    유형이 MinMaxType 프로토콜을 준수하는 속성만 지정할 수 있습니다.

    선언

    스위프트

    public func min<T>(ofProperty property: String) -> T? where T : MinMaxType

    매개변수

    property

    최소값을 원하는 속성의 이름입니다.

  • 모든 결과 중 지정된 속성의 최대값(가장 높은 값)을 반환하거나 결과가 비어 있는 경우 nil 을 반환합니다.

    경고

    유형이 MinMaxType 프로토콜을 준수하는 속성만 지정할 수 있습니다.

    선언

    스위프트

    public func max<T>(ofProperty property: String) -> T? where T : MinMaxType

    매개변수

    property

    최소값을 원하는 속성의 이름입니다.

  • 모든 결과에 대해 지정된 속성 값의 합계를 반환합니다.

    경고

    유형이 AddableType 프로토콜을 준수하는 속성만 지정할 수 있습니다.

    선언

    스위프트

    public func sum<T>(ofProperty property: String) -> T where T : AddableType

    매개변수

    property

    값을 합산해야 하는 속성의 이름입니다.

  • 모든 결과에 대한 지정된 속성의 평균값을 반환하거나 결과가 비어 있는 경우 nil 을 반환합니다.

    경고

    유형이 AddableType 프로토콜을 준수하는 속성의 이름만 지정할 수 있습니다.

    선언

    스위프트

    public func average<T>(ofProperty property: String) -> T? where T : AddableType

    매개변수

    property

    평균값을 계산해야 하는 속성의 이름입니다.

알림

  • collection이 변경될 때마다 호출될 블록을 등록합니다.

    블록은 초기 결과와 함께 비동기적으로 호출된 다음 컬렉션의 객체 또는 컬렉션에 있는 객체를 변경하는 각 쓰기 트랜잭션(write transaction) 후에 다시 호출됩니다.

    블록에 전달되는 change 매개변수는 각 쓰기 트랜잭션(write transaction) 중에 추가, 제거 또는 수정된 객체를 collection 내에서 인덱스 형식으로 보고합니다. 제공된 변경 정보에 대한 자세한 내용과 이를 사용하여 UITableView 을 업데이트하는 방법에 대한 예는 RealmCollectionChange 문서를 참조하세요.

    차단이 호출되는 시점에 collection은 완전히 평가되고 최신 상태이므로 동일한 스레드에서 쓰기 트랜잭션 (write transaction)을 수행하지 않거나 명시적으로 realm.refresh() 호출하지 않는 한 해당 스레드에 액세스하면 차단이 수행되지 않습니다. 일.

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

    예를 들어 다음 코드는 알림 차단을 추가한 직후 쓰기 트랜잭션(write transaction)을 수행하므로 초기 알림이 먼저 전달될 기회가 없습니다. 결과적으로 초기 알림에는 쓰기 트랜잭션(write transaction) 후 Realm의 상태가 반영됩니다.

    let dogs = realm.objects(Dog.self)
    print("dogs.count: \(dogs?.count)") // => 0
    let token = dogs.observe { changes in
        switch changes {
        case .initial(let dogs):
            // Will print "dogs.count: 1"
            print("dogs.count: \(dogs.count)")
            break
        case .update:
            // Will not be hit in this example
            break
        case .error:
            break
        }
    }
    try! realm.write {
        let dog = Dog()
        dog.name = "Rex"
        person.dogs.append(dog)
    }
    // end of run loop execution context
    

    블록에 업데이트를 전송하려는 한 반환된 토큰을 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 invalidate() 을 호출합니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    선언

    스위프트

    public func observe(on queue: DispatchQueue? = nil,
                        _ block: @escaping (RealmCollectionChange<Results>) -> Void) -> NotificationToken

    매개변수

    queue

    알림을 수신할 직렬 디스패치 대기열입니다. nil 인 경우 알림이 현재 스레드로 전달됩니다.

    block

    변경이 발생할 때마다 호출되는 차단입니다.

    반환 값

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

동결된 객체

결과

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

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

    선언

    스위프트

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

시퀀스 지원

컬렉션 지원

  • 비어 있지 않은 collection에서 첫 번째 요소의 위치입니다. 빈 collection의 endIndex 와 동일합니다.

    선언

    스위프트

    public var startIndex: Int { get }
  • 컬렉션의 '끝 이후' 위치입니다. endIndex는 아래 첨자에 대한 유효한 인수가 아니며, 0개 이상의 Successor() 애플리케이션으로 항상 startIndex에서 도달할 수 있습니다.

    선언

    스위프트

    public var endIndex: Int { get }
  • 선언

    스위프트

    public func index(after i: Int) -> Int
  • 선언

    스위프트

    public func index(before i: Int) -> Int

Element: Encodable에서 사용 가능