您可以在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的结果是没有意义的。
因此答案是:“您不能”(也没有充分的理由尝试)。
首先as
,在右侧采用类型而不是表达式。因此,您遇到的是语法错误。
您似乎想做的是将“转换”为在运行时计算的类型。那甚至意味着什么?让我们首先考虑什么是“广播”。
通常,当我们有一个强制转换表达式时x as T
,它具有两个组成部分:
x as T
具有编译时类型T?
,它使您可以处理可能无法x
直接执行的结果表达式。换句话说,它允许您更改编译时类型。x
为的子类型T
,如果是,则求值为包含该值的可选值,否则为nil
。如果类型T
在编译时未知,则显然您无法执行其编译时部分。(显然,结果表达式的编译时类型不能依赖于编译时未知的东西。)
另一部分,运行时组件,可以用运行时计算的类型来完成吗?当然。例如,
import Foundation
let afterCast : Super? =
(superA as AnyObject).isKindOfClass(subType) ? superA : nil
尚不清楚这是否是您想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句