如何将一个string的类名转换为类的types本身?
为了在日志文件中存储类名,我将类types的描述转换为string:
let objectType: NSObject.Type = Object.self let str = String(describing: objectType)
但是,我没有成功地将str
转换回types为NSObject.Type
的variables,以便在generics方法中使用它。
我怎么能这样做?
你可以从string
取回你的类,但是你需要在获取类名的时候使用你的项目的模块名。 如果你不使用你的模块名称,那么它将返回nil
因为之前引用的类名称没有完全由模块名称限定。 您应该更改类名称string以表示您的类的完全限定名称:
let myClassString = String(MyModule.MyViewController.self) print(myClassString) let myClass = NSClassFromString("MyModule.\(myClassString)") as! MyViewController.Type print(myClass)
我只是简单地创build了一个扩展来使用任何对象:
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) } }
classForCoder方法用类名输出模块名称。 然后,您必须将该string转换回其各自的对象types。
也许是这样的:
let objectType: NSObject.Type = NSObject.self let str = String(objectType) // str = "NSObject" let aClass = NSClassFromString(str) as! NSObject.Type // aClass = NSObject.Type