从日志文件中我获得一个包含类名称的字符串,例如"儿童"可以定义为:
class Child: Object, MyProtocol {
// ...
}
我想在以下泛型类中使用此类:
open class MyClass<T: Object> where T:MyProtocol {
//…
open class func doSomething() {
//…
}
}
我已经问了一个问题here如何从字符串中获取类类型,可以通过以下方式获取:
let objectType = NSClassFromString("MyModule.\(strFromLog)”) as! Object.Type
显然,objectType
无法直接在MyClass
上使用,因为它的类型为T.Type
而不是T
,以下内容无效:
MyClass<objectType>.doSomething() // -> error: Use of undeclared type 'objectType'
但是,是否还有一种方法可以在objectType
中使用MyClass
而无需更改泛型类本身(即其他方法依赖它)?
答案 0 :(得分:0)
很遗憾,您不能将NSClassFromString
的结果用作通用类的类型。但是,您可以通过编写以下内容来解决此问题:
protocol SomeProtocol {
}
extension NSString: SomeProtocol {
}
class SomeClass<T: SomeProtocol> {
class func doSomething() {
}
}
if let some = NSClassFromString("NSString") {
if some is NSString.Type {
SomeClass<NSString>.doSomething()
print("String")
} else {
print("Not String")
}
}