2016-09-24 74 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") 
    } 
} 
相關問題