2016-08-18 4 views
-1

整数オブジェクトをループして整数変数に追加する場合、forループが完了したら合計を出力します。これを行う簡単な方法はありますか?今は、オブジェクトを取得して個別に印刷することができますが、合計は毎回0として印刷されます。 下記のコードをご覧ください。これはSwift with Parseでバックエンドとして書かれたアプリ向けです。 何かが助けてくれて、ありがとう!forループに整数を追加して合計を印刷する

var itemsArray = [Int]() 
let followingUserItemsQuery = PFUser.query() 
followingUserItemsQuery?.whereKey("objectId", equalTo: (PFUser.currentUser()?.objectId!)!) 
followingUserItemsQuery?.findObjectsInBackgroundWithBlock({ (objects: [PFObject]?, error) in 
       if let objects = objects { 
       for object in objects { 
       let followingUsersArray = (object["following"] as! [String]) 
       // Get number of listed items of following users with PFUser query for their total objects 
        for followingUser in followingUsersArray { 
         print(followingUser) 
         let query = PFUser.query() 
         query?.whereKey("objectId", equalTo: followingUser) 
         //Get each user's listedItems count then append to a higher-level integer variable 
         query?.getFirstObjectInBackgroundWithBlock({ (object, error) in 
          itemsArray.append(object!["listedItems"] as! Int) 
         }) 
        } 
       } 
      } 
      let itemsSum = itemsArray.reduce(0, combine: +) 
      print(itemsSum) 
      self.followingUsersAddedItems.text = String("Your followers listed "+String(itemsSum)+" items") 
+3

'let itemsSum = ...'を 'findObjectsInBackgroundWithBlock'に移動して、同期と非同期の機能について学んでください –

答えて

1

これを試してみてください:

var count = 0 
... 
for followingUser in followingUsersArray { 
    count += object!["listedItems"] as! Int 
} 
1

あなたのコードInt値を組み合わせる/減らすために正しいです。問題は、ネストされた非同期Parseクエリのいずれかが完了してコールバックを実行する前に実行されることです。だから実行時にはitemsArrayはまだ空です。の後にitemsSumと計算されるようにコードを再設計する必要があります。

関連する問題