实例化ViewController并将其从Swift中的字符串转换为类

时间:2017-10-20 09:12:51

标签: ios swift uiviewcontroller

我有字符串数组

var arr = ["firstViewController", "secondViewController", ....]

对于它的每个项目,我需要实例化ViewController,如

var myVC = self.storyboard?.instantiateViewController(withIdentifier: "firstViewController") as! firstViewController

如果我想从循环中实例化视图控制器,我需要从字符串中创建类,但是这段代码

let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
let cls: AnyClass = NSClassFromString("\(namespace).\(className)")!

不工作

2 个答案:

答案 0 :(得分:1)

在Swift中,您无法转换为运行时类型对象。 Swift在编译时知道所有变量的类型。

现在你有一个变量,它的值是编译器一无所知的某种类型,所以编译器不能让你对变量进行任何类型转换。

参考: - Link1Link2

答案 1 :(得分:1)

无需使用NSClassFromString(_:)从循环中实例化UIViewController。你在前两行代码中朝着正确的方向前进:

let nameArray = ["firstViewController", "secondViewController" /*....*/]
var controllerArray = [UIViewController?]()

for name in nameArray {
    controllerArray.append(self.storyboard?.instantiateViewController(withIdentifier: name))
}