我试图找出最好的方法从一个度量向下转换到更具体的东西,例如:
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>
是完全不相关的类型。