访问函数外部的变量-swift
我试图在函数外访问变量,我试图在类外声明变量,但它一直在声明中显示初始值,而不是函数内的值,这是我的代码,我需要访问databaseScore访问函数外部的变量-swift,swift,Swift,我试图在函数外访问变量,我试图在类外声明变量,但它一直在声明中显示初始值,而不是函数内的值,这是我的代码,我需要访问databaseScore func getDatabaseScore()-> Int{ let ref2 = FIRDatabase.database().reference().child("users").child("user").child((user?.uid)!) ref2.observeSingleEvent(of: .childAdded,
func getDatabaseScore()-> Int{
let ref2 = FIRDatabase.database().reference().child("users").child("user").child((user?.uid)!)
ref2.observeSingleEvent(of: .childAdded, with: { (snapshot) in
if var userDict = snapshot.value as? [String:Int] {
//Do not cast print it directly may be score is Int not string
var databaseScore = userDict["score"]
}
})
return databaseScore
}
您正在执行异步操作,因此
getDatabaseScore
在observeSingleEvent
完成之前返回。你可以看看这样的东西
class MyClass {
var databaseScore: Int = 0
func getDatabaseScore() {
let ref2 = FIRDatabase.database().reference().child("users").child("user").child((user?.uid)!)
ref2.observeSingleEvent(of: .childAdded, with: { (snapshot) in
if let userDict = snapshot.value as? [String:Int] {
print(userDict["score"]) // Confirm you have the a value
self.databaseScore = userDict["score"]
}
}
}
您正在执行异步操作,因此
getDatabaseScore
在observeSingleEvent
完成之前返回。你可以看看这样的东西
class MyClass {
var databaseScore: Int = 0
func getDatabaseScore() {
let ref2 = FIRDatabase.database().reference().child("users").child("user").child((user?.uid)!)
ref2.observeSingleEvent(of: .childAdded, with: { (snapshot) in
if let userDict = snapshot.value as? [String:Int] {
print(userDict["score"]) // Confirm you have the a value
self.databaseScore = userDict["score"]
}
}
}
正如注释中提到的,不可能从包含异步任务的方法返回某些内容 例如,您需要一个完成块
func getDatabaseScore(completion: (Int?)->()) {
let ref2 = FIRDatabase.database().reference().child("users").child("user").child((user?.uid)!)
ref2.observeSingleEvent(of: .childAdded, with: { (snapshot) in
if let userDict = snapshot.value as? [String:Int] {
//Do not cast print it directly may be score is Int not string
completion(userDict["score"])
}
completion(nil)
})
}
正如注释中提到的,不可能从包含异步任务的方法返回某些内容 例如,您需要一个完成块
func getDatabaseScore(completion: (Int?)->()) {
let ref2 = FIRDatabase.database().reference().child("users").child("user").child((user?.uid)!)
ref2.observeSingleEvent(of: .childAdded, with: { (snapshot) in
if let userDict = snapshot.value as? [String:Int] {
//Do not cast print it directly may be score is Int not string
completion(userDict["score"])
}
completion(nil)
})
}
@如果这是一个答案,请将其添加为著名的异步陷阱。无法从包含异步任务的方法返回某些内容。请在问题中添加更多代码。特别是,显示封闭对象,以及调用
getDatabaseScore()
@EICaptainv2.0的位置。如果这是一个答案,请将其添加为著名的异步陷阱。无法从包含异步任务的方法返回某些内容。请在问题中添加更多代码。特别是,显示封闭对象,在调用getDatabaseScore()
databaseScore的地方仍然保持0,其声明值可能userDict[“score”]
包含0?尝试在其中添加一个print
,以确认您的对象是结构还是类?您指的是哪个对象?databaseScore仍然保留0,其声明值可能userDict[“score”]
包含0?尝试在其中添加一个print
,以确认您的对象是结构还是类?您指的是哪个对象?这会导致以下错误:致命错误:在展开可选值时意外发现nil我添加的代码无法崩溃,崩溃很可能发生在let ref2…
行中。使用诸如闭包中的可选绑定来避免崩溃。应用程序在此崩溃:self.getDatabaseScore(){score in//如果score!score
是可选的,您必须检查它,我更新了答案。这给了我以下错误:致命错误:在展开可选值时意外发现nil我添加的代码无法崩溃,崩溃很可能发生在let ref2…
行中。使用诸如闭包中的可选绑定来避免崩溃。应用程序在此崩溃:self.getDatabaseScore(){score in//如果score!分数
是可选的,你要检查一下,我更新了答案。