Swift自动创建临时词典

时间:2015-05-27 15:41:04

标签: ios uitableview swift dictionary

我正在使用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实体来完成我想要的东西,但它似乎不是最好的方法。

任何帮助将不胜感激!感谢

1 个答案:

答案 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