在Swift中将模型追加到数组,仅打印最后添加的项

时间:2018-07-29 02:39:38

标签: swift

我不确定我在这里缺少什么,但是它对我“看起来”正确。

我的视图控制器顶部有以下两个变量:

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
    }

}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您只有一个void Main() { IList<Customer> AllCustomers; IList<Hotel> Hotels; var reg = from h in Hotels join c in AllCustomers on h.HotelRegistration equals c.Name select h; } class Customer { public int ID { get; set; } public string Name { get; set; } public string description { get; set; } } class Hotel { public int ID { get; set; } public string HotelRegistration { get; set; } public string description { get; set; } } 实例-您不断更新该实例的属性并将其添加到数组中,因此最后,您的数组拥有对该实例的多个引用,并且一个实例具有您分配的最后一个值。

您可以使代码更加“敏捷”-使用ItemSpecifics而不是类,这会带来不可变性;通常,您不应该使用这种形式的“ _”私有属性;您可以将属性设为只读,但使用结构则不需要任何方式。

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

NS...