我发现以下代码不起作用,但我并不完全理解原因。
假设我有一个保存在字符串中的类名。我想将视图控制器转换为此字符串引用的类。
let controller = self.navigationController as! NSClassFromString("MyUIViewController")
斯威夫特似乎没有理解这一点 - 我收到了这个错误:
Undeclared use of NSClassFromString.
或错误:
Consecutive statements must be separated by `,`
任何人都可以解释为什么会这样吗?我不能基于某个变量来演绎(使用as?)类型?
由于
答案 0 :(得分:1)
不,您无法转换为运行时类型对象。您必须转换为编译时类型。这就是我们编写x as Int
而非x as Int.self
的原因:Int
是一种类型,Int.self
是在运行时表示该类型的对象。
投射到NSClassFromString("MyUIViewController")
意味着什么?现在你有一个变量controller
,它的值是编译器一无所知的某种类型,所以编译器不允许你对controller
做任何事情。您无法在其上调用方法或访问属性,因为编译器不知道它具有哪些方法或属性。您不能将它作为参数传递给函数,因为编译器不知道它是否是该参数的正确类型。
如果你编辑你的问题来解释你想用controller
做什么(你要在它上面调用什么方法,或者你想要访问哪些属性或者想要传递给它的函数),那么我我会修改我的答案,以实现你的目标。