Swift 2.1 中的 NSClassFromString
Posted
技术标签:
【中文标题】Swift 2.1 中的 NSClassFromString【英文标题】:NSClassFromString in Swift 2.1 【发布时间】:2015-12-28 11:01:30 【问题描述】:我想我阅读了大部分 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
也不。
现实生活中的目标是从数据库中读取类名并相应地加载适当的故事板/UIViewController。所以我正在寻找一种将 UIViewController 类名作为字符串传递并用它实例化 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
转换的错误。
【问题讨论】:
您是否检查了来自***.com/questions/24030814/… 的所有答案?这个看起来很接近你想要的:***.com/a/32265287/1187415. 查看我帖子中的编辑... 【参考方案1】:试试下面给出的代码
let viewController = storyboard?.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
此代码允许您实例化情节提要视图控制器。 但是不能传递 View Controller 类名。
您必须传递视图控制器的情节提要标识符。 请查看下面的图片。
【讨论】:
亲爱的朋友,请阅读他的完整问题。他的现实生活目标是从情节提要中实例化视图控制器类。 在阅读完整问题之前请不要投反对票。 不,他不是。问题是他想从数据库中读取类名(而不是标识符)并实例化一个视图控制器。 亲爱的朋友,他想实例化这个类,他正在使用故事板。但是在使用情节提要时没有标识符就无法做到 不使用storyboard时,可以使用类名,但如果是storyboard,我们必须使用storyboard id来初始化。以上是关于Swift 2.1 中的 NSClassFromString的主要内容,如果未能解决你的问题,请参考以下文章
如何将边框添加到从 Swift 2.1 中的故事板链接的 @IBAction 按钮?