How to convert a string with the name of a class to the class type itself?

纵然是瞬间 提交于 2019-12-05 03:25:52

You can get your class back from string, but you need to use your project's module name while getting class name. If you don't use your module name then it will return nil because the class name you have referenced earlier is not fully qualified by the module name. You should change the class name string to represent the fully qualified name of your class:

let myClassString = String(MyModule.MyViewController.self)
print(myClassString)
let myClass = NSClassFromString("MyModule.\(myClassString)") as! MyViewController.Type
print(myClass)

I simply created an extension to use on any object:

extension NSObject {

    // Save Name of Object with this method
    func className() -> String {

        return NSStringFromClass(self.classForCoder)

    }

    // Convert String to object Type
    class func objectFromString(string: String) -> AnyObject? {
        return NSClassFromString(string)
    }

}

The method classForCoder prints out the module name with the class name. Then you must that string in order to convert it back to its respective object type.

Perhaps something like:

let objectType: NSObject.Type = NSObject.self 

let str = String(objectType) // str = "NSObject"

let aClass = NSClassFromString(str) as! NSObject.Type // aClass = NSObject.Type
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!