我想设置一个变量,该变量在闭包内部的闭包之外,但最终不会结束。但是,将变量设置为的值是正在打印到控制台。此外,在设置返回变量并自行打印之后,正确的值将被打印到控制台。当我返回变量时出现问题;其值保持与初始化时的值相同。下面是一些伪代码:快速关闭不设置变量
let str: String = {
var ret: String = "default value"
functionWithClosure(with: (some_name) in {
if let name = some_name {
ret = name
print(name) // prints successfully
print(ret_name) // also prints successfully
}
})
return ret // returns "default value"
}()
这是不正常的实际代码:
let name: String = {
var ret_name = "default value"
if let uid = FIRAuth.auth()?.currentUser?.uid {
FIRDatabase.database().reference().child("users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
if let name = dictionary["name"] as? String {
ret_name = name
print(ret_name)
}
}
})
}
return ret_name
}()
设置字符串的值请注明您获得的是编译时间或运行时错误的错误,以及提。 –
我没有收到错误。问题是'ret'在返回时保持为“默认值”。 –
如果你提供你的闭包代码以及你正在使用的'functionWithClosure',它会更有帮助。 –