为了存储在日志文件中的类名我转换类类型的描述字符串:如何将带有类名的字符串转换为类类型本身?
let objectType: NSObject.Type = Object.self
let str = String(describing: objectType)
不过,我并不在str
回转化为NSObject.Type
类型的一个变量成功以通用方法使用它。
我该怎么做?
为了存储在日志文件中的类名我转换类类型的描述字符串:如何将带有类名的字符串转换为类类型本身?
let objectType: NSObject.Type = Object.self
let str = String(describing: objectType)
不过,我并不在str
回转化为NSObject.Type
类型的一个变量成功以通用方法使用它。
我该怎么做?
您可以从string
得到您的课程,但您需要在获取课程名称时使用您的项目的模块名称。如果您不使用模块名称,那么它将返回nil
,因为之前引用的类名称不完全符合模块名称。您应更改类名称字符串以表示您的类的完全限定名称:
let myClassString = String(MyModule.MyViewController.self)
print(myClassString)
let myClass = NSClassFromString("MyModule.\(myClassString)") as! MyViewController.Type
print(myClass)
确实,模块名称是缺少的部分! – Taco
也许是这样的:
let objectType: NSObject.Type = NSObject.self
let str = String(objectType) // str = "NSObject"
let aClass = NSClassFromString(str) as! NSObject.Type // aClass = NSObject.Type
我只是创造了一个扩展到任何物体上使用:
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打印出与类名的模块名称。然后,您必须将该字符串转换为其各自的对象类型。
您想创建类型的实例吗?我不确定在不同类型的初始化器需求不同的情况下,这是如何工作的。好奇,如果有人知道一种方式来做到这一点。 –