🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

1484閲覧

DataSnapshot型について

ruuuu

総合スコア176

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/12/31 02:02

以下はFirebaseからデータを取得する際のコードなのですが、分からない部分があり質問させて貰いました。

func fetchContentsData(){ let ref = Database.database().reference().child("timeLine").queryLimited(toLast: 100).queryOrdered(byChild: "postDate").observe(.value) { (snapShot) in self.contentsArray.removeAll() if let snapShot = snapShot.children.allObjects as? [DataSnapshot]{ for snap in snapShot{ if let postData = snap.value as? [String:Any]{ let userName = postData["userName"] as? String let userProfileImage = postData["userProfileImage"] as? String let contents = postData["contents"] as? String let comment = postData["comment"] as? String var postDate:CLong? if let postedDate = postData["postDate"] as? CLong{ postDate = postedDate } //postDateを時間に変換していきます。 let timeString = self.convertTimeStamp(serverTimeStamp: postDate!) self.contentsArray.append(Contents(userNameString: userName!, profileImageString: userProfileImage!, contentImageString: contents!, commentString:comment!, postDateString: timeString)) } } self.timeLineTableView.reloadData() let indexPath = IndexPath(row: self.contentsArray.count - 1, section: 0) if self.contentsArray.count >= 5{ self.timeLineTableView.scrollToRow(at: indexPath, at: .bottom, animated: true) } } }

具体的にはif let snapShot = snapShot.children.allObjects as? [DataSnapshot]{こちらの部分の、[DataSnapshot」の部分なのですが、これは辞書型もしくは配列として扱われているのでしょうか?
と言いますのも以下は実行した際に、breakpointを設定した際のsnapshotの中身なのですが、配列のような形で表示がされておりました。
イメージ説明
いまいち、[DataSnapshot」という部分について、分からなかった為、ご助言いただけましたら幸いです。

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

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

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

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

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

guest

回答1

0

配列の型です。[DataSnapshot]という記述はDataSnapshotの配列型を意味します。

Swiftの配列は、Swift Standard LibraryのArray<Element>という構造体です。そしてSwiftのコードの[型]は、Array<型>の糖衣構文です。
つまり、[SataSnapshot]と記述するのは、Array<DataSnapshot>と記述しているのと完全に同じ意味を表しています。

Array<DataSnapshot>は要素にDataSnapshotをもつArray型なので、型としてas?などで[DataSnapshot]と書くこともできるわけです。

配列を作るときに、
var list: [Int] = []
とするだけでなく、
var list = [Int]()
と、一見奇妙な記述ができるのは、
var list = Array<Int>()
と同じだからです。

投稿2019/12/31 09:04

eytyet

総合スコア803

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問