你可以在Swift中转换为元类型吗?看起来你应该能够(毕竟你可以从Metatypes实例化对象)。
以下不起作用:
class Super {}
class A : Super {}
let superA:Super = A()
let subType = superA.dynamicType
let afterCast = superA as subType
//Compiler error: "use of undeclared type 'subType'"
有谁知道正确的方法吗?
修改
正如newacct指出的那样,.dynamicType的结果显然直到运行时才知道,因此编译时转换为.dynamicType的结果是没有意义的。
所以答案是:"你不能"#34; (并没有充分的理由尝试)。
答案 0 :(得分:4)
首先,as
在右侧采用类型而非表达式。所以你所拥有的是语法错误。
您似乎要尝试做的是“强制转换”为在运行时计算的类型。这甚至意味着什么?让我们首先考虑什么是“演员”。
通常,当我们有一个演员表达式x as T
时,它有两个组成部分:
x as T
具有编译时类型T?
,它允许您使用x
直接无法执行的结果表达式执行操作。换句话说,它允许您更改编译时类型。x
的运行时类型是否为T
的子类型,如果是,则计算为包含该值的可选项,否则,它将计算为{{1 }}。如果在编译时不知道类型nil
,那么显然你不能做它的编译时部分。 (结果表达式的编译时类型显然不能依赖于编译时未知的内容。)
另一部分,即运行时组件,可以使用在运行时计算的类型来完成吗?当然。例如,
T
目前尚不清楚这是否是你想要的。