gpt4 book ai didi

swift - 从闭包返回值并完成的函数

转载 作者:行者123 更新时间:2023-11-30 11:29:37 25 4
gpt4 key购买 nike

我正在尝试编写一个从 Firebase 请求关闭返回值的函数。

不幸的是,我还没有完全掌握闭包和完成处理程序。

我想像这样使用和调用这个函数:

let name = userName(forUID: “UID01”)

而不是这样:

let name = userName(forUID: "UID01") { name in
print(name)
}

我想这样使用它的原因是因为这个函数会在代码的很多地方被调用,而且我喜欢让我的代码尽可能干净和简洁。否则,我可以声明一个全局变量并在函数体内使用 self.name = name 。但是,例如,如果我调用这个函数 5 次,我将不得不声明 5 个全局变量...

该函数如下所示:

func userName(forUID: String, completion: @escaping (_ name: String) -> ()) {
var ref: DatabaseReference!
ref = Database.database().reference()

ref.child("users").child(forUID).observeSingleEvent(of: .value, with: { (snapshot) in
let data = snapshot.value as? NSDictionary
let name = data?["name"] as? String ?? ""
completion(name)
// ...
})
}

最佳答案

您的第二个版本已经接近。应该是这样的:

userName(forUID: "UID01") { name in
print(name)
}

由于您使用异步 Firebase 方法来获取数据,因此您无法创建返回该数据的函数。这不是异步方法的工作原理。

关于swift - 从闭包返回值并完成的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com