gpt4 book ai didi

swift - 将模型附加到 Swift 中的数组仅打印最后添加的项目

转载 作者:行者123 更新时间:2023-11-28 11:53:17 26 4
gpt4 key购买 nike

我不确定我在这里遗漏了什么,但它“看起来”对我来说是正确的。

我的 View Controller 顶部有以下两个变量:

var itemSpecifics: ItemSpecifics!
var itemSpecificsArray = [ItemSpecifics]()

我调用 API 并在成功时执行以下操作:

self.itemSpecifics = ItemSpecifics()
self.itemSpecificsArray.removeAll()

这是我获取信息并将其添加到 itemSpecifics 的区域。

if let getItemSpecifics = item["ItemSpecifics"] as? NSDictionary {
if let getNameValueList = getItemSpecifics["NameValueList"] as? NSArray {
print("game value list count \(getNameValueList.count)")
for i in 0..<getNameValueList.count {
if let getName = getNameValueList[i] as? NSDictionary {
if let itemName = getName["Name"] as? String {
print(itemName)
self.itemSpecifics._itemSpecificName = itemName
}
if let getValue = getName["Value"] as? NSArray {
let itemValue = getValue[0] as? String
self.itemSpecifics._itemSpecificValue = itemValue!
print("-- \(itemValue!)")
}
}
//End The Condition Information
self.itemSpecificsArray.append(self.itemSpecifics)
}
}
}

因此,它被正确打印。

Professionally Graded
-- Not Graded
Sport
-- Baseball-MLB
Product
-- Lot
Player
-- Derek Jeter
Team
-- New York Yankees
Card Manufacturer
-- Topps
League
-- Major Leagues
Era
-- Modern (1981-Now)
Original/Reprint
-- Original

但是,当我这样做时:

for i in 0..<self.itemSpecificsArray.count {
print(self.itemSpecificsArray[i].itemSpecificName)
print("** \(self.itemSpecificsArray[i].itemSpecificValue)")
}

打印如下:

Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original
Original/Reprint
** Original

这是我的 ItemSpecifics 类。

class ItemSpecifics {
var _itemSpecificName: String!
var _itemSpecificValue: String!

var itemSpecificName : String {
if _itemSpecificName == nil {
_itemSpecificName = ""
}
return _itemSpecificName
}

var itemSpecificValue : String {
if _itemSpecificValue == nil {
_itemSpecificValue = ""
}
return _itemSpecificValue
}

}

我错过了什么?

最佳答案

您只有一个 ItemSpecifics 实例 - 您不断更新该实例的属性并将其添加到数组中,因此最后您的数组包含对一个实例的多个引用,并且一个实例具有您分配的最后一个值。

你可以让你的代码更“敏捷”——使用一个struct而不是一个类,这样可以提供不变性;您通常不应该使用那种形式的“_”私有(private)属性;您可以只将属性设置为只读,但使用结构您将不需要任何方式。

此外,除非不可避免,否则不要在 Swift 中使用 NS... 基础类。

struct ItemSpecifics {
let name: String
let value: String
}


if let getItemSpecifics = item["ItemSpecifics"] as? [String:Any],
let getNameValueList = getItemSpecifics["NameValueList"] as? [[String:Any]] {

for nameValueList in getNameValueList {
if let name = nameValueList["Name"] as? String,
let value = nameValueList["Value"] as? String {
let newItem = ItemSpecifics(name: name, value: value)
self.itemSpecificsArray.append(newItem)
}
}
}

关于swift - 将模型附加到 Swift 中的数组仅打印最后添加的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576788/

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