我希望从闭包中获取变量guestname
的值,并将guestname
定义为全局可行,然后将此值传递给使用它的其他类。但问题是,当我打开封闭之外的guestname
它是空的但在里面我看到了实际价值。因此,当我将guestname
传递给其他类时,它传递了nil引起的问题。将值赋给guestname
并从关闭中获取此值的正确方法是什么?谢谢
queryUserID?.getFirstObjectInBackground(block: { (object, error) in
if error == nil {
guestname = object!.value(forKey: "username") as! String
}
})
答案 0 :(得分:1)
问题是你的关闭会执行异步任务,所以显然你不会得到你的" guestname"变量在外面。这是完成块发挥作用的地方。您可以为闭包编写完成块并返回获取的结果。
看看这个stackoverflow post,它解释了你的场景,并教你如何为你的闭包写一个完成块。我希望这有帮助。
答案 1 :(得分:1)
我认为你必须像所有完成块那样从封闭本身传递数据
queryUserID?.getFirstObjectInBackground() { [weak CLASS] (object, error) in
if let unwrappedObject = object as? String,
error == nil {
guestname = unwrappedObject.value(forKey: "username")
CLASS?.passData(guestname)
}
}