Swift: как использовать AnyObject.Тип в качестве параметра?

#swift #swift5

#swift #swift5

Вопрос:

ниже приведен код:

 let cls = NSClassFromString("UIView") as? UIView.Type
  

Я хочу, чтобы извлечь этот код как функцию :

 func ClassFromString(_ className: String, _ classType: AnyClass) -> AnyClass?{
   return NSClassFromString("UIView") as? classType   // it is error
}
  

но это не работает. как это сделать?

Комментарии:

1. В чем смысл вашего кода, если вам нужно указать тип класса? Тогда вы могли бы также сделать var view: UIView напрямую, чего мне здесь не хватает?

2. Этот код довольно похож на objective-c . Я думаю, есть более быстрый способ

Ответ №1:

Вы можете создать универсальную функцию, подобную этой

 func classFromString<T>(_ className: String, _ classType: T) -> T? {
    return NSClassFromString(className) as? T
}
  

И используйте его следующим образом

 if let cls = classFromString("UIView", UIView.self) {
   let view = cls.init()
}
  

Ответ №2:

Попробуйте с этим:

 func getClassFromString<T>(_ cName: String, cType: T) -> T.Type {
    return NSClassFromString(cName) as? T.self
}