将非泛型类型分配给泛型类型属性

时间:2017-05-31 13:16:25

标签: swift generic-programming

考虑以下通用字典类:

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时,它会抛出错误。有人知道如何解决它吗?

0 个答案:

没有答案