gpt4 book ai didi

arrays - 在 Init 函数中发出异步 Web 请求 [Swift]

转载 作者:行者123 更新时间:2023-11-30 13:58:03 26 4
gpt4 key购买 nike

我试图从处理 HTTP/JSON 请求的类“RestApiManger”返回一些 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 内部打印数组计数,在 block 外部,它返回 0(请参阅代码中带箭头的注释)。我对 Swift 有点陌生,不确定为什么会发生这种情况。

有什么办法可以让我完成这项工作吗?预先感谢您。

最佳答案

对您的 API 管理器的调用:

RestApiManager.sharedInstance.getElements

它需要一个闭包立即返回,这意味着代码的执行移动到这一行:

print(self.items.count)

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

您需要做的是在 for 循环之后对该闭包内的 items 数组执行任何您想要的操作。

关于arrays - 在 Init 函数中发出异步 Web 请求 [Swift],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33353722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com