Swift:附加到词典

时间:2015-04-06 02:52:22

标签: arrays swift dictionary append

我在尝试在swift中附加一个Dictionary时遇到了问题。每次按下按钮时我都会尝试记录,以及时间。 我有两个按钮,每个按钮都有自己的IBAction,这里是第一个:

@IBAction func button1(sender: AnyObject){
logButton("button1")
}

在这个例子中,我有" button1"传递给一个函数。这是我的词典和功能:

var buttonPresses = Dictionary<String, AnyObject>()
var time = NSDate()

func logButton(button: String){
time = NSDate()
formatter.timeStyle = .shortStyle
buttonPresses[button] = formatter.stringFromDate(time)
}

按下两个按钮后,这将用以下内容填充词典:

[button1: 1:15PM, button2: 1:15PM]

我想做的是每次都添加它,而不是使用键(button1或2)并更新时间。首选输出是:

[button1: 1:15PM, button2: 1:15PM, button1: 1:17PM, button2: 1:19PM]

有了这个,我试着让字典成为一个包含字典的数组,这样我就可以使用append来添加每个按钮了:

var buttonPresses = [[String:AnyObject]]()

我不确定如何在logBu​​tton函数中设置代码行来附加按下时间的按钮。我尝试过这样的事情,但它还没有奏效:

buttonPresses.append([button] = formatter.stringFromDate(time))

我非常业余,所以任何帮助都会受到赞赏!谢谢。

2 个答案:

答案 0 :(得分:2)

使用有意义的访问者存储数据时,struct是一个有趣的选择:

import Cocoa

struct ButtonPress {
    var name: String?
    var time: NSDate?
    init(name: String, time: NSDate) {
        self.name = name
        self.time = time
    }
}

var buttonPresses = [ButtonPress]()

func logButton(buttonName: String) {
    let thisPress = ButtonPress(name: buttonName, time: NSDate())
    buttonPresses.append(thisPress)
}

logButton("button1")
logButton("button2")
logButton("button3")

for pressed in buttonPresses {
    println("Name: \(pressed.name!) - Time: \(pressed.time!)")
}

enter image description here

答案 1 :(得分:0)

字典可能不是您问题的正确数据结构。

根据我的理解,您希望存储与每个按钮关联的一系列时间。

由于字典的性质,如果您使用按钮标签作为键,则每个键只能存储一个time数据*

此外,因为字典本质上是一个哈希表,所以你不会有一个很好的有序序列[button1: 1:15PM, button2: 1:15PM, button1: 1:17PM, button2: 1:19PM]

我建议你可以使用一个元组数组来存储这些信息。例如,

var buttonPresses = [(code:String, time:AnyObject)]
buttonPresses.append(code:"button1", time:"1:15PM")

*如果按键存储数组

,则可以克服