Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

データのフィルタリング - SwiftUI

項目一覧

  • SwiftUI ビューでの観察
  • Realm コレクションの検索
  • ObservedResults による Realm のフィルタリングまたはクエリ
  • N述語によるフィルタリング
  • Realm Type-セーフ クエリ API によるクエリ
  • セクションのフィルタリングされた結果

このページの例で使用されている @ObservedResultsプロパティ ラッパーは SwiftUI ビューでの使用を意図したものです。 代わりにビューモデルで結果を確認するには、変更リスナーを登録します。

バージョン 10.19.0 の新機能

Realm Swift SDK を使用すると、 .searchable を拡張できます 。ObservedResultsを使用してRealmをクエリする場合、結果セット内でコレクションとキーパスを指定して、検索可能としてマークできます。

コレクションは、OserveredResults クエリによって表されるバインドされたコレクションです。 この例では、Realm 内のすべてのドキュメント オブジェクトのコレクションを表すdogs変数です。

キーパスは、検索するオブジェクトのプロパティです。 この例では、犬のコレクションを犬の名前で検索しています。 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をフィルタリングまたはクエリして、ビュー内のオブジェクトのサブセットのみを使用することはできます。

Tip

以下も参照してください。

Realm がサポートするクエリ構文とクエリのタイプの詳細については、「読み取り - Swift SDK 」および「データのフィルタリング - Swift SDK 」を参照してください。

NPredify Query@ObservedResults API を使用して をフィルタリングするには、 NPredate を を の引数として使用する方法を示します。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 の新機能: ObservedResults で型セーフなクエリを実行するには、を使用します。

Realm 型セーフなクエリ API@ObservedResultsを使用するには、 のクエリを引数として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

戻る

Write Data