我正在使用UITableView的数据源,我需要一个带字典的数组。
我尝试制作一个数组,并在这样的for循环中用字典填充它。
temporaryDataDict = [:]
temporaryDataDict = ["name":stockName, "ticker":ticker, "lastPrice":lastPrice, "purchasePrice":purchasePrice, "weight":weight, "daysHeld":daysHeld]
temporaryDataArray.append(temporaryDataDict)
但当然,当我开始使用dataSource填充tableView时。我最终得到了23个完全相同的词典(for循环中的最后一个词典)。
这当然是因为它每次都在改变字典。
我已经能够找到一种方法将数据保存在词典中,或者每次以编程方式创建一个新词典(因为他们需要一个新名称,否则它会覆盖数据)。< / p>
那么每次for循环运行时我怎么能以编程方式编写字典,然后获取密钥&amp;这些词典的价值观?
还是我完全错了?
如果有帮助,请参阅我正在处理的数据类型。
我有一个有6个属性的股票(或项目)。所以我认为最合适的是有一个数组,其中数组中的每个项目都是&#34; stock&#34;作为包含6个属性的字典。
那么可以让swift自动为我创建这些词典吗?因为我不知道所需的词典数量。
PS。 我知道这就是CoreData的用途。我使用这些数组和词典稍后填写我的CoreData。
如果上述情况不可能,我知道我可能会创建一个新的CoreData实体来完成我想要的东西,但它似乎不是最好的方法。
任何帮助将不胜感激!感谢
答案 0 :(得分:1)
我不相信字典是在这种情况下使用的最佳数据结构。由于字典通常由唯一键和值组成。
我编辑了这个答案。最初我建议创建一个包含每个记录字段属性的类。然后我想这可以通过typealias
为每个记录使用元组来完成。使用typealias
可以解决与创建元组数组相关的问题。
ETA:不过请阅读评论,因为Zaph比我更了解这一点,认为使用Class是一个更强大的解决方案。
这是我基于元组的解决方案。接下来的大部分内容就是快速创建一些虚拟数据:
typealias StockRecord = (stockName:String, ticker: String, lastPrice: Double, purchasePrice: Double, weight: Double, daysHeld: Int)
var temporaryDataArray = [StockRecord]()
// use a loop to create dummy records and add each to the array
// rough and ready - just to test the solution
var loopCounter: Int
for loopCounter = 0; loopCounter <= 23; loopCounter++ {
//some dummy field values for each record
var stockName = "stockName" + ("\(loopCounter)")
var ticker = "ticker" + ("\(loopCounter)")
var lastPrice = Double(loopCounter)
var purchasePrice = Double(loopCounter)
var weight = Double(loopCounter)
var daysHeld = loopCounter
var newRecord = (stockName, ticker, lastPrice, purchasePrice, weight, daysHeld)
temporaryDataArray.append(newRecord)
}
ETA:迭代数组 - 例如:
for recordEntry in temporaryDataArray {
var a = recordEntry.stockName
var b = recordEntry.ticker
// etc
}
或者使用枚举 - 例如:
for (count,recordEntry) in enumerate(temporaryDataArray) {
println("\(count) \(recordEntry)")
}
输出:
0 (stockName0, ticker0, 0.0, 0.0, 0.0, 0)
1 (stockName1, ticker1, 1.0, 1.0, 1.0, 1)
2 (stockName2, ticker2, 2.0, 2.0, 2.0, 2)
3 (stockName3, ticker3, 3.0, 3.0, 3.0, 3)
etc