我正在尝试扩展UIViewController
nib
注册。
所以我们可以代替PastOrdersViewController(nibName: "PastOrdersViewController", bundle: nil)
做类似的事情
extension UIViewController {
func loadNib(vc: UIViewController,nibName: String) -> UIViewController{
return vc(nibName: nibName, bundle: nil)//Error: Cannot call value of non-function type 'UIViewController'
}
}
但是,出现以下错误:-
错误:无法调用非功能类型'UIViewController'的值
答案 0 :(得分:2)
由于vc
参数指向UIViewController
的实例这一事实,以及由于该方法看起来像您想在控制器类上调用初始化程序而发生错误。
您可以使用Self
,并删除第一个参数,这将使loadFromNib
方法非常简单。您可以进行的另一种优化是将笔尖名称声明为可选,并将其默认值设置为nil
:
extension UIViewController {
static func loadFromNib(_ nibName: String? = nil) -> Self {
return self.init(nibName: nibName, bundle: nil)
}
}
您将能够很好地使用如下方法:
let vc = MyViewController.loadFromNib() // loads from MyViewController.nib
或
let vc = MyViewController.loadFromNib("Custom") // loads from Custom.nib