错误:无法调用非函数类型的值

问题描述 投票:-1回答:1

我想扩大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'的值

swift xib
1个回答
2
投票

该错误发生在vc参数指向UIViewController的实例的事实中,以及该方法看起来如何在控制器类上调用初始化器。

您可以使用Self,并删除第一个参数,这将使loadFromNib方法非常简单。您可以进行的另一个优化是将nib名称声明为可选,并为其指定默认值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
© www.soinside.com 2019 - 2024. All rights reserved.