見出し画像

【Firebase×Swift】でマッチングアプリ風の条件指定検索を実装する。

こんにちは!

Firebaseでデータベースからデータを取ってくる時に詰まったのでその時の解決方法をメモ。

やりたかったのはマッチングアプリにあるような検索機能。
アプリを使う人が検索条件を決めて、検索!をするとそれに合ったデータが取れる。というやつです。

Firebaseの有料版にして他の検索ライブラリと連携して・・・とか色々やるともっとうまいことできると思いますが無料版でちょっとした検索機能を付けたいという時なら使えるかも・・・

<解決方法>
1:検索したい項目全部を一つにしたデータのクラスを作成する。
2:検索をかけるデータがある場所を置く(Query)。
3:置いた場所の後ろに検索条件を付け足していく(WhereField)。


以上です。(シンプル。。)

以下、コードと実装
1:検索したい項目全部を一つにしたデータのクラスを作成する。

import UIKit

class searchQueryData: NSObject {

   //検索条件に入れたい項目をいれる
   var talk:String?
   var bodyType:String?
   var purpose:String?
}


2:検索をかけるデータがある場所を置く(Query)。
3:置いた場所の後ろに検索条件を付け足していく(WhereField)。

//まず検索をかける場所のリファレンスをおく
//後ろに条件を付け足していくイメージ
var Ref = Firestore.firestore().collection("検索をかける場所").limit(to: 10)
       
       //条件の指定がある=nilじゃない、ならwhereFieldを足す
       if searchQuery?.bodyType != nil {
           Ref = Ref.whereField("bodyType", isEqualTo: searchQuery?.bodyType as Any)
       }
       if searchQuery?.talk != nil {
           Ref = Ref.whereField("talk", isEqualTo: searchQuery?.talk as Any)
       }
       if searchQuery?.purpose  != nil {
           Ref = Ref.whereField("purpose", isEqualTo: searchQuery?.purpose as Any)
       }

     //全項目付け足したらデータを取得する
       Ref.getDocuments() { (querySnapshot, error) in
       if let error = error {
           print("DEBUG_PRINT: snapshotの取得が失敗しました。 \(error)")
           HUD.hide()
           return
           }

            //      ---検索条件にマッチしたデータが手に入る---      //

           }


めちゃめちゃあっさりとですが、もしも何かの参考の一助になればと思います。。。

初投稿なのですみません!ありがとうございました!

この記事が気に入ったらサポートをしてみませんか?