Error: Cannot call value of non-function type

Error: Cannot call value of non-function type

我正在尝试 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'
    }
}

但是,我收到以下错误:-

Error:Cannot call value of non-function type 'UIViewController'

错误发生的原因是 vc 参数指向 UIViewController 的一个实例,并且该方法看起来像您想要调用控制器上的初始化程序 class.

您可以使用 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