2016-09-24 44 views
0

从日志文件中,我获得一个字符串,其中包含一个类的名称,例如, “儿童”为可以定义为:如何在通用类中使用类类型

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因为它是类型的10,不T了,下面不工作:

MyClass<objectType>.doSomething() // -> error: Use of undeclared type 'objectType' 

然而,是否还使用在MyClassobjectType,而不需要改变通用类本身的方式(即其他方法依赖它)?

回答

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") 
    } 
} 
相关问题