質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

870閲覧

[swift] firebaseにデータが有り無しで処理を分けたい

ttah

総合スコア35

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/08/16 08:08

firebaseからデータを取得した際、一致するデータがある時と、無い時で
処理を分けたいのですがうまくいきません

↓のコードで試してみましたが、データが無い時にprintの結果が
// nilじゃない
// <null>
と帰ってきてしまいました

swift

1let ref = Database.database().reference().child(a) 2 3ref.observeSingleEvent(of: .value, with: { (DataSnapshot) in 4 5if DataSnapshot.value != nil { 6 print("nilじゃない") 7 print((DataSnapshot.value)!) 8 9 } else { 10 print("nil") 11 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

よくデータの設計というか、プログラムの想定がわからないのですが、

確か、firebaseでnullを保存できなかった気がしますが、、、
child(a)が無い場合を想定しているのでしょうか???

もし、その場合は違う書き方をしたら良いような気がします。
一つ上の親を取得して、その配列の中に目的のchild(a)があるかどうか
を判定するべきでは無いでしょうか?

どうしても、child(a)の中身で判定したいというなら、
child(a)が持つべきデータ型を考え、valueをキャスト後に
string型なら.count != 0、Int型なら != 0等での判定にするのはどうでしょう?
もちろんそうなると、登録時にその0は禁止する必要が出てきますが、、、

修正1
遅くなりました。
英語のサイトですが、同様にどうやってnullをチェックするんだって聞いている人がいます。
https://stackoverflow.com/questions/35882630/firebase-checking-for-null-value-swift

結論は

swift

1if snapshot.value is NSNull { 2} else { 3}

もしくは

swift

1guard snapshot.exists() else{ 2 print("snapshot doesn't exist") 3 return 4} 5print("snapshot exists")

を試してみてください。

投稿2019/08/16 11:10

編集2019/08/20 15:03
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttah

2019/08/17 03:40

> child(a)が無い場合を想定しているのでしょうか??? はい、child(a)が無い場合を想定し、child(a)を取得しようとした時にnilが返されると思い質問のコードを作成しました。 (nilが返されると思った理由は リファレンスに、「データが存在しない場合、返される snapshot の value は nil です。」と書いてあったからです) 私が期待する挙動はchild(a)が無い時にchild(a)を取得しようとした時にnilを返してもらうことでしたがそれは不可能なのでしょか?不可能でなければどの様にコードを書き直せば良いのでしょか? また > 確か、firebaseでnullを保存できなかった気がしますが、、、 child(a)はもともと存在しないので私はnullを保存するという事はしていません > 一つ上の親を取得して、その配列の中に目的のchild(a)があるかどうか を判定するべきでは無いでしょうか? 現在その様にして判断していますが、child(a)が無い時にchild(a)を取得しようとした時にnilを返してもらえた方がシンプルなので出来たら良いなと思い質問させていただきました
ttah

2019/08/22 09:07

解決しました、ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問