我在尝试在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]]()
我不确定如何在logButton函数中设置代码行来附加按下时间的按钮。我尝试过这样的事情,但它还没有奏效:
buttonPresses.append([button] = formatter.stringFromDate(time))
我非常业余,所以任何帮助都会受到赞赏!谢谢。
答案 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!)")
}
答案 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")
*如果按键存储数组
,则可以克服