0
現在以下のコードがあります。これにより、firebaseからの情報が正常に取得され、辞書の配列に追加されます。私の質問は、この辞書を.observeの外でどのように使うのですか?私はfirebaseとの非同期対同期の問題を理解していますが、このデータを別の機能でどのように使用できるかについての良い説明は見つかりませんでした。.observeの外で変数を使用する方法
override func viewDidLoad() {
FIRDatabase.database().reference().child("vendors").observe(.value, with: { (snapshot) in
let spot = snapshot.value as! [String : AnyObject]
for each in spot{
let name2 = each.value["name"] as! String
let booth2 = each.value["boothNum"] as! String
let desc2 = each.value["description"] as! String
self.name = name2
self.booth = booth2
self.desc = desc2
let dict1: [String: String] = ["name" : name2, "booth" : booth2, "desc" : desc2]
self.vendorDict.append(dict1)
dump(self.vendorDict)
}
})
これは正常に.observeに必要な情報をダンプしますが、辞書を外にダンプすると空であると表示されます。
「あなたの "スポット" varにアクセスできない理由が分かっていますか? *可変スコープ*と呼ばれています。クロージャー内で宣言されているため、アクセスできません。あなたが* viewDidLoad()*の外で別のスコープでそれを定義すれば、それにアクセスすることができます。 (閉じ込め内にある場合は* self *を追加する必要がありますが、それは問題ありません) – dfd
私のviewDidLoad()の外にある辞書の配列にアクセスしようとしています。スポット情報を配列に追加することで、配列にアクセスできるはずですか? – ttorbik
私はその問題を知っていると思います。 * vendorDict *の定義を投稿できますか? – dfd