В настоящее время для загрузки ViewController с таким же nibname я использую код следующимнагрузки ViewController с СИБ использованием дженериков
let recommendationVC : RecommendationVC = RecommendationVC(nibName: "RecommendationVC", bundle: nil)
Я чувствую, указав nibname является unncessary как это совпадает с именем контроллера. Поэтому я решил использовать дженерики и вывести тип и имя острия с помощью дженериков
protocol NibIdentifiable {
static var nibNameIdentifier: String { get }
}
// MARK: - Indentifies each storyboard from its classname.
extension NibIdentifiable where Self: UIViewController {
static var nibNameIdentifier: String {
return String(describing: self)
}
}
extension UIViewController :NibIdentifiable
{
}
extension UIViewController {
func instantiate<Controller: UIViewController>(_: Controller.Type) -> Controller where Controller: NibIdentifiable {
guard let controller = Self(nibName:Controller.nibNameIdentifier,bundle:nil) as? Controller else {
fatalError("Could not dequeue cell with identifier: \(Controller.nibNameIdentifier)")
}
return controller
}
}
Но при попытке создать экземпляр VC,
let recommendationVC :RecommendationVC = UIViewController.instantiate()
получения ошибки Общий параметр «Controller» не может быть выведено
Что не так в этом подходе?
пусть recommendationVC: RecommendationVC = RecommendationVC.instantiate () попробуйте вот так –
@KonstantinKryzha новский я это пробовал. Облицовка одной и той же проблемы –
Когда имя низа совпадает с именем класса, вам даже не нужно указывать его. Просто сделайте 'let рекомендацияVC = РекомендацияVC()' должна работать нормально. – dan