我想設置一個變量,該變量在閉包內部的閉包之外,但最終不會結束。但是,將變量設置爲的值是正在打印到控制檯。此外,在設置返回變量並自行打印之後,正確的值將被打印到控制檯。當我返回變量時出現問題;其值保持與初始化時的值相同。下面是一些僞代碼:快速關閉不設置變量
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',它會更有幫助。 –