我想從字符串中讀取類並將其類型傳遞給泛型函數。不過好像沒有辦法實現這一目標:從字符串檢索鑄造類的類型
protocol Person { ... }
class Student: Person { ... }
class Teacher: Person { ... }
func foo<SomePerson: Person>(param: String, type: SomePerson.Type) { ... }
// Get class from string and pass class type to foo()
let someClass = NSClassFromString("MyApp.Teacher")
foo("someParam", type: someClass.dynamicType)
嘗試這個,我得到一個錯誤:
Cannot invoke 'foo' with an argument list of type '(String, type: AnyClass.Type)
它實際上是可以得到「真正的」型「教師,而不是泛型類型'AnyClass'並將其傳遞給foo()?這些類是在運行時從文件讀取的 - 所以在調用foo()時使用硬類名稱是不可能的。
感謝您的任何建議!
,如果你知道真正的類型已經使用一個替代而不醜'NSClassFromString' - 如果你不知道的類型,然後你怎麼能確定它是Person的一個子類? – luk2302
我不知道真正的類型...從文件中讀取類名(上例中的MyApp.Teacher)。存儲在文件中的類型通常是Person類的子類。 – kinkee