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"
}
}
出现错误
为什么?
答案 0 :(得分: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"
答案 1 :(得分:0)
您不能对所有类型的索引使用“字符串”。 你应该知道Key可以是Int,String或者你想要的任何东西。 请勿在您的扩展程序中提供类型。
答案 2 :(得分:0)
Dictionary
是一种通用类型。实际上它是Dictionary<Key: Hashable, Value>
,其中Key
可以是采用Hashable
协议的任何类型。
下面:
tempDic["v"] = v
...您尝试将v
值分配给关键"v"
,就像您知道Key
和Value
始终都是String
一样事实并非如此。这就是错误的原因。
为了解决这个问题,您应该使计算属性postDic
能够处理各种键和值,或者将扩展名限制为特定类型的Key
和{{ 1}}使用Value
子句。
选择哪个选项取决于您想要达到的目标。