使用NSClassFromString的结果进行动态转换(" MyUIViewController")

时间:2017-04-22 03:07:58

标签: swift

我发现以下代码不起作用,但我并不完全理解原因。

假设我有一个保存在字符串中的类名。我想将视图控制器转换为此字符串引用的类。

let controller = self.navigationController as! NSClassFromString("MyUIViewController")
斯威夫特似乎没有理解这一点 - 我收到了这个错误:

Undeclared use of NSClassFromString.

或错误:

Consecutive statements must be separated by `,`

任何人都可以解释为什么会这样吗?我不能基于某个变量来演绎(使用as?)类型?

由于

1 个答案:

答案 0 :(得分:1)

不,您无法转换为运行时类型对象。您必须转换为编译时类型。这就是我们编写x as Int而非x as Int.self的原因:Int是一种类型,Int.self是在运行时表示该类型的对象。

投射到NSClassFromString("MyUIViewController")意味着什么?现在你有一个变量controller,它的值是编译器一无所知的某种类型,所以编译器不允许你对controller做任何事情。您无法在其上调用方法或访问属性,因为编译器不知道它具有哪些方法或属性。您不能将它作为参数传递给函数,因为编译器不知道它是否是该参数的正确类型。

如果你编辑你的问题来解释你想用controller做什么(你要在它上面调用什么方法,或者你想要访问哪些属性或者想要传递给它的函数),那么我我会修改我的答案,以实现你的目标。