词典

2015-11-04 70 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"