Swiftにて以下のようなコードを書いたところ、関数bのprintでは1が出力されるものの、関数aのprintでは0のまま出力されます。
どうすれば関数a内の変数xに関数bでの代入を反映させられるのでしょうか?

class ViewController: UIViewController {

 var x = 0

 func a(){
  b()
  print(x)
}

 func b() {
  x = 1
  print(x)
}

追記
 説明を端折ってしまい、すみません。
 メソッドa,bは、正確には以下のコードです。

@IBAction func a(sender: UIBarButtonItem) {        
    b()
    print(self.id) // 2

    // 画像をNSDataに変換
    let fileName = "image\(self.id).png"
    let pngData = NSData(data: UIImagePNGRepresentation(self.displayImage.image!)!)
    let file = NCMBFile.fileWithName(fileName, data: pngData) as! NCMBFile

    // ファイルストアへ画像のアップロード
    file.saveInBackgroundWithBlock({ (error: NSError!) -> Void in
        if error != nil {
            // 保存失敗時の処理

        } else {
            // 保存成功時の処理

        }
    })

  }

func b()  {
    // user1クラスを検索するNCMBQueryを作成
    let query = NCMBQuery(className:"xxx")

    // データストアでの検索を行う
    query.findObjectsInBackgroundWithBlock{(objects, error ) in
        if error != nil {
            // 検索に失敗した場合の処理
        }else{
            // 検索に成功した場合の処理
            self.id = objects.count
            print(self.id) //1
        }
    }
}

print1ではobjects.countの値が出力されましたが、2でははじめに定義した0がそのまま出力されました。また、アップロードされた画像のナンバリングも、objects.countの値ではなく、0のままでした。