데이터 필터링 - SwiftUI
이 페이지의 내용
SwiftUI View에서 관찰
이 페이지의 예시에 사용된 @ObservedResults
속성 래퍼(wrapper)는 SwiftUI View에서 사용하기 위한 것입니다. 대신 View 모델에서 결과를 관찰하려면 변경 리스너를 등록합니다.
Realm 컬렉션 검색
버전 10.19.0의 새로운 기능
Realm Swift SDK 를 사용하면.searchable.ObservedResults 를 사용하여 Realm을 쿼리 할 때 결과 설정하다 에 컬렉션 과 영역 를 지정하여 검색 가능으로 표시할 수 있습니다.
컬렉션은 ObservedResults 쿼리로 표시되는 바인딩된 컬렉션입니다. 이 예에서는 dogs
변수가 영역에 있는 모든 Dog 객체의 컬렉션을 나타냅니다.
키 경로는 검색하려는 객체 속성입니다. 이 예시에서는 dog 이름으로 dogs collection을 검색합니다. Realm Swift .searchable
구현은 String
유형의 키 경로만 지원합니다.
struct SearchableDogsView: View { Dog.self) var dogs ( 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을 열고 지정된 유형의 모든 객체를 반환합니다. 그러나 @ObservedResults
를 필터링하거나 쿼리하여 보기에 있는 객체의 하위 집합만 사용할 수 있습니다.
팁
다음도 참조하세요.
Realm에서 지원하는 쿼리 구문 및 쿼리 유형에 대한 자세한 내용은 다음을 참조하세요: 읽기 - Swift SDK 및 데이터 필터링 - Swift SDK를참조하세요.
NSPredicate로 필터링
NSPredicate 쿼리 API 를 사용하여 를 필터링하려면 @ObservedResults
NSPredicate 를 전달합니다. 에 대한 인수로 filter
사용합니다.
struct FilterDogsViewNSPredicate: View { 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) } } } } }
Realm Type-Safe Query API를 사용한 쿼리
버전 10.24.0의 새로운 기능: where를 사용하여 ObservedResults에 대해 형식 안정 쿼리를 수행합니다.
@ObservedResults
를 Realm Type-Safe Query API와 함께 사용하려면, where
에 클로저 쿼리를 인수로 전달하세요:
struct FilterDogsViewTypeSafeQuery: View { 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
를 필터링하거나 쿼리하여 뷰에 있는 객체의 하위 집합만 사용할 수 있습니다.
Dog.self, ( sectionKeyPath: \.firstLetter, where: ( { $0.weight > 40 } )) var dogs