我试图从类中返回一些JSON数据" RestApiManger"处理HTTP / JSON请求并将其传递到我的班级" CardList"中的数组中,但我遇到了麻烦。
这是我的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
}
似乎它在初始化之前没有传递给items数组,直到它被调用。它在RestApiBlock内打印数组计数,在块外,它返回0(用箭头查看代码中的注释)。我对斯威夫特有点不熟悉,不确定为什么会这样。
有什么方法可以让我的工作吗? 提前谢谢。
答案 0 :(得分:0)
调用您的API管理员:
RestApiManager.sharedInstance.getElements
接受闭包的立即返回,这意味着代码的执行移动到这一行:
print(self.items.count)
在完成请求的闭包之前调用。这意味着当您打印其计数时,您的items数组为空,这就是您在那里获得0的原因。
你需要做的是在for循环之后用闭包里面的items数组做你想做的事。