Swift 2.1中的NSClassFromString

时间:2015-12-28 11:01:31

标签: ios swift uiviewcontroller swift2 nsobject

我想我已经阅读了大部分SO问题和Google的答案,但仍然无法使其正常运行。拿这个代码示例:

import UIKit

class Person: NSObject {

    var name = "Pieter"

}

let PersonClass: AnyClass? = NSClassFromString("Person")
let person = PersonClass()
print(person.name)

NSClassFromString("Person")更改为NSClassFromString("MyAppName.Person")并没有什么不同。也不在PersonClass声明后面添加as! NSObject.Type。在类声明之前也不添加@obcj(Person

现实生活中的目标是从数据库中读取类名并相应地加载相应的storyboard / UIViewController。所以我正在寻找一种方法将UIViewController类名称作为String传递并使用它实例化UIStoryboard。

怎么做?

编辑:这是我目前在你的建议之后尝试现实场景:

let storyboard = UIStoryboard(name: "MyStoryboard", bundle: nil)
let MyClassName = "MyApp.MyTableViewController"
let MyClass = NSClassFromString(MyClassName) as! UITableViewController.Type
let controller = storyboard.instantiateInitialViewController() as! MyClass

它出错"MyClass" is not a type。我无法将其删除,否则我将收到无法从AnyClass转换的错误。

1 个答案:

答案 0 :(得分:0)

尝试下面给出的代码

let viewController = storyboard?.instantiateViewControllerWithIdentifier("ViewController") as! ViewController

此代码允许您实例化故事板视图控制器。 但是您无法传递View Controller类名。

您必须传递视图控制器的故事板标识符。 请查看下面的图片。

enter image description here