0
我有一個類爲其他類保存類類型。這些類型是在運行時註冊的,所以實際上在編譯時我不會知道類的類型。但後來我將使用這些註冊的類類型來創建它們的實例。這裏是我的班級定義在swift中創建類元類型的實例
class registeredClassTypes
{
var URLContext: AnyClass
var ParserContext: AnyClass
var ValidationContext: AnyClass
func setTypes(URLContext: AnyClass, ParserContext: AnyClass, ValidationContext: AnyClass) {
self.URLContext=URLContext
self.ParserContext = ParserContext
self.ValidationContext = ValidationContext
}
}
現在,我很抱歉收集這些類型的對象。
let classTypesObj = registeredClassTypes()
classTypesObj.setTypes(SomeClass.self, ParserContext: AnotherClass.self, ValidationContext: OneMoreClass.self)
有時我需要這些類型的實例。雖然可以像下面,但使用類型轉換類:
let requestType:SomeClass.Type = classTypesObj.URLContext as! SomeClass.Type
let obj = requestType.init() //successfully creates the object of 'SomeClass'
我剛纔提到一些博客和認識了從元類型不能沒有類型轉換創建該對象。
但我的問題是,我不會知道類'SomeClass',所以我不能將它轉換爲'SomeClass'。 有什麼辦法可以實現這個動態解析類的類型。我想是這樣的或其他任何方式:
let requestType = classTypesObj.URLContext
let obj = requestType.init()
簡稱this blog & this blog太多,但他們也類型轉換它。任何其他方式來解決這個問題也是可以接受的
感謝您的答覆。如果我有許多符合每個協議的類,這個實現將如何工作。例如,我可能有4-5個類確認URLContextProtocol服務於不同的目的。並且我將如何知道要調用哪個類實例,因爲您只是將協議傳遞給setTypes方法? – ImViresh
你在協議上調用'init',而不是類。協議是一個承諾,你的班級將實施某些特性和方法。它不限制如何實施這些屬性或方法。看到我編輯的答案 –