詞典

2015-11-04 135 views
0
extension Dictionary{ 
    var postDic:String{ 
     let date = NSDate.init(timeIntervalSinceNow: 0) 
     let timestamps = date.timeIntervalSince1970 
     let v = String(timestamps) 
     var tempDic = self 
     tempDic["v"] = v 
     return "123" 
    } 
} 

有錯誤詞典

enter image description here

爲什麼?

回答

0

您不能對所有類型的索引使用「字符串」。 你應該知道該鍵可以是一個Int,一個字符串或任何你想要的。 不要在您的擴展中輸入類型。

+0

tempDic是字典,[「V」:「XXXXX」]權應我認爲 – user5524535

0

Dictionary是一個通用類型。實際上它是Dictionary<Key: Hashable, Value>,其中Key可以是任何採用Hashable協議的類型。

這裏:

tempDic["v"] = v 

...你嘗試分配v值鍵入"v",如果你知道,無論KeyValue永遠是String,這是情況並非如此。這就是錯誤的原因。

爲了解決這個問題,您應該使計算性能postDic能夠處理各種鍵和值,或通過使用where條款限制您的擴展到特定類型的KeyValue

要選擇哪個選項取決於您想要達到的目標。

+0

它的方式使用「如果VAR _ =字符串(時間戳){...}'? – user5524535

+0

對不起,我不明白你的問題。 – courteouselk

+0

我認爲tempDic [「xxx」] =「xxxxx」必須是正確的,但不是。我不知道爲什麼 – user5524535

1

您需要將對象轉換爲鍵值。您將需要製作一個變異方法,而不是隻讀計算屬性。你需要約束你的鑰匙StringLiteralConvertible類型,嘗試這樣的事情:

extension Dictionary where Key: StringLiteralConvertible { 
    mutating func postDic(value: Value) { 
     guard 
      let timeKey = NSDate().timeIntervalSince1970.description as? Key 

     else {return} 
     self[timeKey] = value 
    } 
} 


var dic:[String:AnyObject] = [:] 


dic.postDic("Test") 

print(dic) // "["1446650572.81642": Test]\n"