gpt4 book ai didi

arrays - 将类对象追加到数组 [Swift]

转载 作者:行者123 更新时间:2023-11-30 10:10:17 25 4
gpt4 key购买 nike

我有一个 RestAPI,可以从网页中提取 JSON 数据,并且因为我想遵循 MVC 编程标准,所以我想通过实例化 RestAPI 类的“数据列表”类来获取此数据。

我有一个名为“Card”的类,它提供了一种数据对象类型的基本结构。我有一个名为“CardList”的类,其初始化创建一个“Card”类数组。

但是,我在将卡类数据附加到我的 CardList 数组时遇到问题。

这是 CardList 类的代码:

class CardList {

var cards: [Card]

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
var c = [helm]
let items: NSMutableArray = []

//Get API Array
RestApiManager.sharedInstance.getElements { (json: JSON) in
let results = json["results"]
for (_, subJson) in results {
let card:AnyObject = subJson["card"].object
items.addObject(card)
}

for var i = 0; i < items.count; ++i{
let data:JSON = JSON(items[i])
let newCard = Card(name: data["title"].stringValue, cost: Int(data["cost"].string!)!, type: data["type_id"].stringValue, subType: data["subtype_id"].stringValue, description: data["description"].stringValue)

c.append(newCard)
}

}
cards = c.sort { $0.cost < $1.cost }
}

//END Class
}

所以基本上在初始化时,此类创建一个虚拟卡,将其添加到名为“c”的数组中。创建一个名为“items”的数组。 RestApiManager 返回 JSON 数据,对于结果中返回的每种数据类型,它都会添加到“items”数组中。

然后我们循环遍历“items”数组,将其读取为 JSON(我使用 SwiftyJSON 插件/代码片段)并为数组中的每个项目创建一个新的“Card”类。然后我们将“Card”附加到“c”数组中。

最后,我们获取卡片数组“cards”并将其设置为等于按其值(value)成本排序的“c”数组。

问题:

运行代码后,“cards”数组仅返回名为“helm”的虚拟卡,并且没有任何数据添加到“c”数组中。

注释:

是的,我的 Api 正在工作,如果我打印“for var i = 0”循环中的值,它会打印正确的值。如果我在同一循环中打印“c.count”,我会得到两个(API 仅返回 1 个其他数据集或“Card”)。如果我在该循环之外打印“c.count”,则在循环之后,它表示数组中只有 1 个项目,而实际上应该有两个项目(虚拟数据和从 JSON 调用返回的数据)。

所以,这显然与我的语法有关。或者也许我让事情变得比他们需要的更复杂。我对 Swift 相当陌生,并且有点困惑。我只是需要其他人来查看我的代码。

提前谢谢您。

最佳答案

RestApiManager.sharedInstance.getElements 异步工作。
包含数据的 block 在 init 函数退出后执行。

将用于对数组进行分配和排序的代码移至 block 中。

...
for var i = 0; i < items.count; ++i{
let data:JSON = JSON(items[i])
let newCard = Card(name: data["title"].stringValue, cost: Int(data["cost"].string!)!, type: data["type_id"].stringValue, subType: data["subtype_id"].stringValue, description: data["description"].stringValue)

c.append(newCard)
}
cards = c.sort { $0.cost < $1.cost }
}
}

关于arrays - 将类对象追加到数组 [Swift],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33350226/

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