2015-04-06 109 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