2014-10-06 2 views
1

У меня есть очень простые модели, какSwift - получение класса универсального типа в

class Model { 

} 

class User : Model { 

} 

class Group : Model { 

} 

Теперь мне нужно проверить тип дженериков, чтобы знать, какой класс передается в качестве параметра

func getRepository<ModelType: Model>() { 
    if (typeof(ModelType) == User.self) { 
     // Do something specific to User 
    } else { 
     ..... 
    } 
} 

Но я мог бы не выясните, как получить класс ГЕНЕРАЛЬНОГО ТИПА.

Очень ценю ваши ответы.

Приветствия

+2

Как вы планируете вызывать функцию? –

+0

Если вы не передаете параметр 'getRepository', компилятор не может вывести тип« ModelType »(кроме своего рода« Модель »). Если вы попытаетесь вызвать 'getRepository()', если он определен как это (даже без ничего), вы получите ошибку компиляции. Я предполагаю, что вы действительно хотите что-то вроде: 'func getRepository (model: ModelType)'? –

+0

@JoachimIsaksson Я намерен называть его 'getRepository ()' –

ответ

0

Как об этом https://gist.github.com/MartinJNash/e2bb27937711f350aa44? Я не уверен, работает ли это, но идея получить имя класса в строке, а затем сравнить их:

class Model { 
    class func classString() -> String { 
     return NSStringFromClass(self) 
    } 
} 


func getRepository<ModelType: Model>() { 
    if (ModelType.classString() == User.classString()) { 
     // ... 
    } 
} 
+0

Спасибо @ blue-smith! Теперь это выглядит как решение для меня. –

Смежные вопросы