RealmCollectionChange
@frozen
public enum RealmCollectionChange<CollectionType>
RealmCollectionChange
값은 Realm 알림에서 보고하는 컬렉션의 변경 사항에 대한 정보를 캡슐화합니다.
변경 정보는 각 변경 유형에 대한 collection의 간단한 행 인덱스 배열과 UITableView
의 배치 업데이트 메서드에 직접 전달하기에 적합한 요청된 섹션의 인덱스 경로 배열, 두 가지 형식으로 제공됩니다.
.update
경우의 인덱스 배열은 UITableView
의 배치 규칙을 따르며, 인덱스 경로로 변환된 후 테이블 뷰의 배치 업데이트 함수에 그대로 전달될 수 있습니다. 예를 들어 간단한 1 섹션 테이블 보기의 경우 다음을 수행할 수 있습니다.
self.notificationToken = results.observe { changes in
switch changes {
case .initial:
// Results are now populated and can be accessed without blocking the UI
self.tableView.reloadData()
break
case .update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the TableView
self.tableView.beginUpdates()
self.tableView.insertRows(at: insertions.map { IndexPath(row: $0, section: 0) },
with: .automatic)
self.tableView.deleteRows(at: deletions.map { IndexPath(row: $0, section: 0) },
with: .automatic)
self.tableView.reloadRows(at: modifications.map { IndexPath(row: $0, section: 0) },
with: .automatic)
self.tableView.endUpdates()
break
case .error(let err):
// An error occurred while opening the Realm file on the background worker thread
fatalError("\(err)")
break
}
}
-
.initial
은(는) 쿼리의 초기 실행이 완료되었으며(해당되는 경우) 이제 차단 작업을 수행하지 않고도 컬렉션을 사용할 수 있음을 나타냅니다.선언
Swift
case initial(CollectionType)
-
.update
는 쓰기 트랜잭션(write transaction)이 커밋되어 컬렉션에 있는 객체를 변경하거나 컬렉션에 있는 객체 중 하나 이상을 수정했음을 나타냅니다.세 가지 변경 배열 모두 항상 오름차순으로 정렬됩니다.
선언
Swift
case update(CollectionType, deletions: [Int], insertions: [Int], modifications: [Int])
매개변수
deletions
이 컬렉션에서 제거된 이전 버전의 컬렉션에 있는 인덱스입니다.
insertions
이 버전에 추가된 새 collection의 인덱스입니다.
modifications
이 버전에서 수정된 새 컬렉션 에 있는 객체의 인덱스입니다.
-
오류가 발생하면 알림 차단이 한 번 호출되어
.error
결과와 함께 오류에 대한 세부 정보가 포함된NSError
가 호출됩니다. 이는 현재 변경 설정하다 를 계산하기 위해 배경 스레드에서 Realm 을 여는 것이 실패한 경우에만 발생할 수 있습니다. .error와 함께 호출된 후에는 콜백 이 다시 호출되지 않습니다. 값.선언
Swift
case error(Error)