如何将度量下放<Unit>到子类



我试图找出最好的方法从一个度量向下转换到更具体的东西,例如:

var thing = Measurement(value: 24, unit: UnitLength.meters) as Measurement<Dimension>
var thing2 = thing as! Measurement<UnitLength>

这会导致崩溃,Xcode会给出一个警告:

Measurement<Dimension>转换为不相关的类型Measurement<UnitLength>总是失败

我找到了这篇关于堆栈溢出的文章,它建议创建一个这样的新对象:

let thing3 = Measurement(value: thing.value, unit: UnitLength.meters)

,但这似乎是hacky和缩放不好,如果我想返回一个通用的测量,我将不得不切换每一个类型的地方,我想用它来创建对象。

这里的基本误解通过使用"downcast"one_answers";subclass"在标题中。在这个故事中没有子类!因此没有沮丧或-而这正是编译器告诉你。

因此,似乎您不理解泛型是什么。整体泛型本身并不是类型。泛型的特定规范是一个类型,但是从不同的特定规范得到的类型彼此之间是不相关的。

所以,Measurement<UnitLength>是一个类型。Measurement根本不是类型,Measurement<Dimension>Measurement<UnitMass>是完全不相关的类型。