【问题标题】:Swift: Appending to DictionarySwift:附加到字典
【发布时间】:2015-06-10 11:06:23
【问题描述】:

我遇到了一个尝试快速附加字典的问题。每次按下按钮时,我都会尝试记录时间。 我有两个按钮,每个按钮都有自己的 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]

我想做的是每次都添加它,而不是使用键(按钮 1 或 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))

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

【问题讨论】:

    标签: arrays swift dictionary append


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      据我了解,您希望存储与每个按钮相关联的时间序列。

      由于字典的性质,如果使用按钮标签作为键,则每个键只能存储一个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")
      

      * 如果您为每个键存储一个数组,则可以克服它

      【讨论】:

        猜你喜欢
        • 2017-12-28
        • 2016-06-11
        • 2023-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多