2015-04-06 111 views
1

我遇到了试图在swift中追加字典的问题。每次按下按钮时,我都会尝试记录日志以及时间。 我有两个按钮,每个都有自己的IBAction为,这里的1:Swift:添加到词典

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

在这个例子中,我传递给函数“按钮1”。下面是我的字典和功能:

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] 

我希望做的是有它每次添加到这一点,而不是使用键(按钮1或2)并更新时间。首选的输出是:

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

就这样,我试图做字典包含字典的数组,这样我就可以使用追加添加的每个按钮按下:

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

我不知道怎么样在logBu​​tton函数中设置代码行来追加按下按钮的时间。我试过这样的东西,但它没有工作:

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

我很漂亮业余,所以任何帮助将不胜感激!谢谢。

回答

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

*可如果你存储每一个数组克服关键

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