Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

데이터 필터링 - SwiftUI

이 페이지의 내용

  • SwiftUI View에서 관찰
  • Realm 컬렉션 검색
  • ObservedResults를 사용하여 Realm 필터링 또는 쿼리하기
  • NSPredicate로 필터링
  • Realm Type-Safe Query API를 사용한 쿼리
  • 섹션 필터링 결과

이 페이지의 예시에 사용된 @ObservedResults 속성 래퍼(wrapper)는 SwiftUI View에서 사용하기 위한 것입니다. 대신 View 모델에서 결과를 관찰하려면 변경 리스너를 등록합니다.

버전 10.19.0의 새로운 기능

Realm Swift SDK 를 사용하면.searchable. ObservedResults 를 사용하여 Realm을 쿼리 할 때 결과 설정하다 에 컬렉션 과 영역 를 지정하여 검색 가능으로 표시할 수 있습니다.

컬렉션은 ObservedResults 쿼리로 표시되는 바인딩된 컬렉션입니다. 이 예에서는 dogs 변수가 영역에 있는 모든 Dog 객체의 컬렉션을 나타냅니다.

키 경로는 검색하려는 객체 속성입니다. 이 예시에서는 dog 이름으로 dogs collection을 검색합니다. Realm Swift .searchable 구현은 String 유형의 키 경로만 지원합니다.

struct SearchableDogsView: View {
@ObservedResults(Dog.self) var dogs
@State private var searchFilter = ""
var body: some View {
NavigationView {
// The list shows the dogs in the realm.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}
}
.searchable(text: $searchFilter,
collection: $dogs,
keyPath: \.name) {
ForEach(dogs) { dogsFiltered in
Text(dogsFiltered.name).searchCompletion(dogsFiltered.name)
}
}
}
}
}

@ObservedResults 속성 래퍼는 Realm을 열고 지정된 유형의 모든 객체를 반환합니다. 그러나 @ObservedResults 를 필터링하거나 쿼리하여 보기에 있는 객체의 하위 집합만 사용할 수 있습니다.

다음도 참조하세요.

Realm에서 지원하는 쿼리 구문 및 쿼리 유형에 대한 자세한 내용은 다음을 참조하세요: 읽기 - Swift SDK데이터 필터링 - Swift SDK를참조하세요.

NSPredicate 쿼리 API 를 사용하여 를 필터링하려면 @ObservedResults NSPredicate 를 전달합니다. 에 대한 인수로 filter 사용합니다.

struct FilterDogsViewNSPredicate: View {
@ObservedResults(Dog.self, filter: NSPredicate(format: "weight > 40")) var dogs
var body: some View {
NavigationView {
// The list shows the dogs in the realm.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}
}
}
}
}

버전 10.24.0의 새로운 기능: where를 사용하여 ObservedResults에 대해 형식 안정 쿼리를 수행합니다.

@ObservedResultsRealm Type-Safe Query API와 함께 사용하려면, where에 클로저 쿼리를 인수로 전달하세요:

struct FilterDogsViewTypeSafeQuery: View {
@ObservedResults(Dog.self, where: ( { $0.weight > 40 } )) var dogs
var body: some View {
NavigationView {
// The list shows the dogs in the realm.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}
}
}
}
}

버전 10.29.0의 새로운 기능

@ObservedSectionedResults 속성 래퍼는 Realm을 열고 지정된 키 경로를 기준으로 섹션으로 나누어 지정된 유형의 모든 객체를 반환합니다. 위의 @ObservedResults 와 마찬가지로 @ObservedSectionedResults 를 필터링하거나 쿼리하여 뷰에 있는 객체의 하위 집합만 사용할 수 있습니다.

@ObservedSectionedResults(Dog.self,
sectionKeyPath: \.firstLetter,
where: ( { $0.weight > 40 } )) var dogs

돌아가기

데이터 쓰기