【发布时间】:2015-01-12 07:34:22
【问题描述】:
你能在 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 的结果是没有意义的。
所以答案是:“你不能”(而且没有充分的理由去尝试)。
【问题讨论】:
-
我猜你根本做不到。
let创建的是实例,而不是类型。 -
对不起,哪个
let?你的意思是let subType = superA.dynamicType创建一个实例?那么有没有办法访问类型本身(实际上是实例化一个 Metatype)? -
你能详细说明这会有什么用吗?
-
在无法使用@objc 标签的各种情况之一中,这是向下转换为协议的复杂尝试的一部分。如果用我想知道的语言根本不可能,那么我可以尝试想一些不同的东西。关于 Metatype 类型的官方文档非常稀少,所以我想问一下。
-
似乎是一种代码异味,可以通过强制转换为协议来解决 - 鼓励鸭子打字。没有更多信息很难确定
标签: swift