变量在if-else子句之后变为nil

0 if-statement ios parse-platform swift

从IF子句中的parse执行查询并存储在StaffID中.我得到了我想要的东西.

但是在if/else子句之后,StaffID变量变为Nil

这是代码

func StaffIdQuery(DeviceToken: String) -> String
{
    var StaffID = ""
    let StaffIdQuery = PFQuery(className: "Staff")
    StaffIdQuery.whereKey("StaffDeviceToken", equalTo: DeviceToken)
    StaffIdQuery.getFirstObjectInBackgroundWithBlock {
        (objects:PFObject?, error: NSError?) -> Void in

        if error == nil && objects != nil {
            StaffID = objects?.valueForKey("StaffID") as! String
            print(StaffID) //This seems fine
        }
        else {
    // Log details of the failure
            print("Error: \(error!) \(error!.userInfo)")
        }
    }
    print(StaffID) //this becomes nil
    return StaffID
}
Run Code Online (Sandbox Code Playgroud)

我应该修复什么来获取查询数据?

Mac*_*tle 5

它是零还是空字符串?我打赌这是后者.在Swift中,当你声明一个类似你的var时:

var StaffID = ""
Run Code Online (Sandbox Code Playgroud)

它假定类型,而String不是String?.这意味着它永远不会是零.

您在后台队列中异步设置StaffID的值,但是在后台队列获得更改以设置它之前打印它.如果你在块内(你已经这样做)打印它,你将获得正确的值.如果没有额外的同步逻辑,则不应该依赖于在不同线程/队列中设置的变量的值.