在初始化函数中制作异步Web请求[Swift]
问题描述:
我试图从类“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有点不熟悉,不确定为什么会发生这种情况。
有什么办法可以使这项工作? 预先感谢您。
答
这次调用您的API经理:
RestApiManager.sharedInstance.getElements
,这需要封闭立即返回,这意味着你的代码的执行移动到该行:
print(self.items.count)
关闭之前完成该请求被调用。这意味着当你打印它的计数时,你的items数组是空的,这就是你在那里得到0的原因。
你需要做的是在for循环之后,用任何你想要的东西来处理闭包中的items数组。
你从哪里得到错误?上面的代码究竟发生了什么? – Sandeep
最后,我试图将从API数组返回的数据移动到类对象“Card”的数组中,但是,我只能使用Rest Api Manager块中的Web数据。看到两个'print(self.items.count)'行?由于某些原因,数据未存储在我的“项目”数组中。它在块内返回1,在块外返回0。 – wUmpage
所以,你是否在做异步请求,这是异步调用应该做的。您无法立即在区块外获得价值。 – Sandeep