2015-10-26 28 views
0

我试图从类“RestApiManger”中处理HTTP/JSON请求并将其传递到我的类“CardList”中的数组中的一些JSON数据,但我遇到了麻烦。在初始化函数中制作异步Web请求[Swift]

这里是我的CardList类:

class CardList { 

    var cards: [Card] = [] 
    var c = NSMutableArray() 
    var items = NSMutableArray() 

    static var sharedInstance = CardList() 

    //MARK - Initalize 
    private init(){ 

     //Dummy Data 
     let helm = Card(name: "Helm of Testing", cost: 10, type: "Equipment", subType: "Head Armor", description: "Some say the Helmet of Testing helps keep it's wearers mind clear.") 

     //Add to Array 
     let c = [helm] 

     //Get API Array 
     RestApiManager.sharedInstance.getElements { (json: JSON) in 
      let results = json["results"] 
      for (_, subJson) in results { 
       let card:AnyObject = subJson["card"].object 
       self.items.addObject(card) 
      } 
      print(self.items.count) // <---returns 1 (Web Data) 
     } 

     print(self.items.count)// <---returns 0 (Nothing) 

     //Set to Returnable Array 
     self.cards = c.sort { $0.cost < $1.cost } 
    } 

    //END Class 
} 

好像它不及格的物品数组中,初始化,直到它被称为后。它将在块外部的RestApiBlock内部打印数组计数,它返回0(请参阅代码中带有箭头的注释)。我对Swift有点不熟悉,不确定为什么会发生这种情况。

有什么办法可以使这项工作? 预先感谢您。

+0

你从哪里得到错误?上面的代码究竟发生了什么? – Sandeep

+0

最后,我试图将从API数组返回的数据移动到类对象“Card”的数组中,但是,我只能使用Rest Api Manager块中的Web数据。看到两个'print(self.items.count)'行?由于某些原因,数据未存储在我的“项目”数组中。它在块内返回1,在块外返回0。 – wUmpage

+0

所以,你是否在做异步请求,这是异步调用应该做的。您无法立即在区块外获得价值。 – Sandeep

回答

0

这次调用您的API经理:

RestApiManager.sharedInstance.getElements 

,这需要封闭立即返回,这意味着你的代码的执行移动到该行:

print(self.items.count) 

关闭之前完成该请求被调用。这意味着当你打印它的计数时,你的items数组是空的,这就是你在那里得到0的原因。

你需要做的是在for循环之后,用任何你想要的东西来处理闭包中的items数组。