Arrays 斯威夫特:附加到字典

Arrays 斯威夫特:附加到字典,arrays,swift,dictionary,append,Arrays,Swift,Dictionary,Append,我在尝试在swift中添加词典时遇到了一个问题。我试图记录每次按下按钮的时间。 我有两个按钮,每个按钮都有自己的iAction,下面是第一个: @IBAction func button1(sender: AnyObject){ logButton("button1") } 在本例中,我将“button1”传递给函数。这是我的字典和函数: var buttonPresses = Dictionary<String, AnyObject>() var time = NSDate()

我在尝试在swift中添加词典时遇到了一个问题。我试图记录每次按下按钮的时间。 我有两个按钮,每个按钮都有自己的iAction,下面是第一个:

@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)
}
我想做的是每次都将它添加到这个列表中,而不是使用键(按钮1或2)更新时间。首选输出为:

[button1: 1:15PM, button2: 1:15PM, button1: 1:17PM, button2: 1:19PM]
有了它,我尝试将字典设置为包含字典的数组,这样我就可以使用append添加每个按钮:

var buttonPresses = [[String:AnyObject]]()
我不知道如何设置logButton函数中的代码行以附加随时间按下的按钮。我尝试过类似的方法,但没有成功:

buttonPresses.append([button] = formatter.stringFromDate(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")

*如果按键存储数组,则可以克服此问题。A
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!)")
}

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!)")
}