词典
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"
}
}
有错误词典
为什么?
您不能对所有类型的索引使用“字符串”。 你应该知道该键可以是一个Int,一个字符串或任何你想要的。 不要在您的扩展中输入类型。
Dictionary
是一个通用类型。实际上它是Dictionary<Key: Hashable, Value>
,其中Key
可以是任何采用Hashable
协议的类型。
这里:
tempDic["v"] = v
...你尝试分配v
值键入"v"
,如果你知道,无论Key
和Value
永远是String
,这是情况并非如此。这就是错误的原因。
为了解决这个问题,您应该使计算性能postDic
能够处理各种键和值,或通过使用where
条款限制您的扩展到特定类型的Key
和Value
。
要选择哪个选项取决于您想要达到的目标。
它的方式使用“如果VAR _ =字符串(时间戳){...}'? – user5524535
对不起,我不明白你的问题。 – courteouselk
我认为tempDic [“xxx”] =“xxxxx”必须是正确的,但不是。我不知道为什么 – user5524535
您需要将对象转换为键值。您将需要制作一个变异方法,而不是只读计算属性。你需要约束你的钥匙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"
tempDic是字典,[“V”:“XXXXX”]权应我认为 – user5524535