我在 objective-c 中有一个方法,它接受字符串并转换为类并将一些公共(public)对象传递给它。
-(UIViewController*)getUIViewController{
NSString* templateID = @"templateId"; // This value is coming from ba ckend
Class c = NSClassFromString(templateID);
UIViewController* vc = [[c alloc] initWithAppRender:appRenderer];
return vc;
}
现在同样的事情转换为 swift。
func getUIViewController() -> UIViewController? {
let templateID = "templateId"
let className = Bundle.main.infoDictionary!["CFBundleName"] as! String + "." + templateID
let aClass = NSClassFromString(className) as! UIViewController.Type
return aClass.init()
}
这里的问题是无法传递存在于所有 View Controller 中的公共(public)对象。我想像在 objective-c 中一样传递 apprenderer 对象。
最佳答案
我建议您像这样为所有 ViewController 创建一个基类,
class BaseViewController: UIViewController {
private var render: NSObject?
required init(appRenderer: NSObject?) {
super.init(nibName: nil, bundle: nil)
self.render = appRenderer
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
然后您可以从服务器返回的类名实例化如下,
func getUIViewController() -> UIViewController? {
let templateID = "templateId"
let className = Bundle.main.infoDictionary!["CFBundleName"] as! String + "." + templateID
let aClass = NSClassFromString(className) as! BaseViewController.Type
let vc = aClass.init(appRenderer: nil)
return vc
}
关于ios - 从字符串中获取类并在 Swift 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940201/