考虑以下通用字典类:
class GenericDictionaryClass<Key:Hashable,Value> : NSCoding{
var internalDictionary = Dictionary<Key,Value>.init()
public init(){
}
public required init?(coder aDecoder: NSCoder) {
let uncodeDictionary = aDecoder.decodeObject(forKey: "internalDictionary") as! Dictionary<Key, Value>
var newDictionary = Dictionary<Key,(Double,Double)>.init()
for(key,tuple) in uncodeDictionary{
var newTuple = tuple as! Tuple
newDictionary[key] = (newTuple.firstValue,newTuple.secondValue)
}
self.internalDictionary = newDictionary ← ERROR!
}
}
我尝试使用非泛型类型修改类属性internalDictionary
,并且它返回此错误:
无法指定类型&#39;字典&#39;的值输入 &#39;&字典LT; ,&GT;&#39;
我试图这样做,因为我的通用字典类确认了nscoding协议,这样我就可以编码和解码它。我已经删除了编码功能,因为我已经测试了它并且它正常工作。我的问题是当我尝试解码字典时。字典值是一个快速元组(,)
,因此当我对其进行编码时,我需要将其转换为其他内容,因为swift不会对元组进行编码。所以我创建了一个类Tuple,我存储我的元组来编码它,当我解码它们时,我会手动将这个元组转换回快速元组。
public class Tuple : NSObject, NSCoding{
var firstValue : Double
var secondValue : Double
init(firstValue : Double, secondValue : Double) {
self.firstValue = firstValue
self.secondValue = secondValue
super.init()
}
public required init?(coder aDecoder: NSCoder) {
self.firstValue = aDecoder.decodeDouble(forKey: "firstValue")
self.secondValue = aDecoder.decodeDouble(forKey: "secondValue")
}
public func encode(with aCoder: NSCoder) {
aCoder.encode(firstValue, forKey: "firstValue")
aCoder.encode(secondValue, forKey: "secondValue")
}
}
我解码字典,创建一个新字典,将所有元组转换为Swift类型,但是当我最终将internalDictionary
设置为newDictionary
时,它会抛出错误。有人知道如何解决它吗?