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

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

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

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

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回答

1298閲覧

Swiftで配列の取得

tonosam

総合スコア14

Firebase

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

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/08/17 06:42

コードを載せた方が早いと思いましたので先にコード載せます。

swift

1 var tn = ["sample1"] 2 3 func takename(){ 4 Firestore.firestore().collection("users").getDocuments() { (querySnapshot, err) in 5 if let err = err { 6 print("(err)") 7 } else { 8 for document in querySnapshot!.documents { 9 // print("(document.documentID) => (document.data())") 10 let sam:String = (document.documentID) 11 let numnum:[String] = sam.components(separatedBy: " ") 12 print(numnum) 13 // print(samsam["tono"] as Any) 14 15 self.tn += numnum 16 }}}} 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 takename() 22 print(tn) 23 }

はじめにvar tnで適当に配列を生成して、func takenameでtnに対して変数numnumを加えていきます。
最後にtnを出力することで["sample1","","",""・・・・]
となる様に設計したいのですが、
print(tn) としても["sample1"]しか出力されません。
一方でfunc内に設定したprint(numnum)では、想定通り出力されています。コンソール画像添付しておきます。
console

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

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

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

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

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

guest

回答1

0

ベストアンサー

takename() の中の処理が非同期処理のため
最初に設定された配列が print(tn) で表示されてますね。

投稿2019/08/17 07:01

TakuyaAso

総合スコア1361

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

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

tonosam

2019/08/17 07:04

なるほどです。 もし宜しければ、同期させる為にはどうすれば良いのかお教えいただくことは可能でしょうか?
TakuyaAso

2019/08/17 07:13

viewDidLoadの中では無理ですね。 通信が終わったのを知りたいなら for 文の外で関数呼び出すとかするといいと思います。 TableViewとかの更新もその部分ですね。
tonosam

2019/08/17 07:22

なるほどです。 ViewDidLoadの中に記載したのは、質問する際に分かりやすいかなと考えての事でした。 最終的には配列をTableViewに一覧で表示させようと考えております。 上記を踏まえた場合でも、for 文の外で関数呼び出す処理で可能になりますでしょうか?
TakuyaAso

2019/08/17 07:29

すみません,条件文の外でした。 func takename(){ Firestore.firestore().collection("users").getDocuments() { (querySnapshot, err) in if let err = err { // 略 } else { for document in querySnapshot!.documents { // 略 } } self.updateHoge() または self.tableView.reloadData() } }
tonosam

2019/08/17 07:35

回答ありがとうございます! 両方試してみたのですが、エラーが出てしまいました。 self.updateHoge() →Value of type 'CellsViewController' has no member 'updateHoge' self.tableView.reloadData() →Ambiguous reference to member 'tableView(_:numberOfRowsInSection:)' 解決策を教えていただけますでしょうか。。
TakuyaAso

2019/08/17 07:41

self.updateHoge() または self.tableView.reloadData() の部分はサンプルなので当然ながら実装しなければ動きませんよ。
tonosam

2019/08/17 08:00

なるほどです。 func updateHoge{ } を記述して中身を自分なりにコーディングしたのですが、思い通りに動きませんでした。 参考にサンプルコードをお教えいただくことは可能でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問