首页 > 解决方案 > 将 Firebase 快照分配给变量

问题描述

我正在尝试将从 Firebase 数据库中读取的信息保存到变量中。这是我阅读信息的方式:

dbHandle = dbReference?.child("users").child(userEmail!).child("state").observe(.value, with: { (snapshot) in
        if let userState = (snapshot.value as? String){
            var taxRate = self.stateAbbreviations[userState]!
            print(taxRate)
        }

    })

我现在的问题是如何使 userState 和 taxRate 在此调用之外可见?

我尝试在调用之外声明 userState,在内部对其进行初始化,然后再次在外部引用它,但它不起作用。例如:

var userState:String? = ""
dbHandle = dbReference?.child("users").child(userEmail!).child("state").observe(.value, with: { (snapshot) in
        let userState = (snapshot.value as? String)
        var taxRate = self.stateAbbreviations[userState]!
        print(taxRate)
    })
print(userState)

但它只打印出“”

有什么建议吗??

标签: swiftfirebasefirebase-realtime-database

解决方案


您正在将 a 初始化var userState为空字符串,并且您在完成之外的打印检索其默认值,在您的 firebase 完成中,您正在初始化另一个 userState 变量let userState =

如果你想在通话之外使用 userState 和 taxRate,你可以这样做,例如:

// Create your variables 
var userState: String = “”

//Create a func with completion handler
func getUserStateAndTaxRate(completion:((String,String) -> Void)?) {
    dbHandle = dbReference?.child("users").child(userEmail!).child("state").observe(.value, with: { (snapshot) in
        let userState = (snapshot.value as? String)
        var taxRate = self.stateAbbreviations[userState]!
        print(taxRate)
        completion?(userState, taxRate)
    })
}

//Then call it
getUserStateAndTaxRate { (userState, taxRate) in 
    // userState and taxRate are now available 
    self.userState = userState 
    self.taxRate = taxRate 
}

推荐阅读