Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 错误:无法调用非函数类型的值_Swift_Xib - Fatal编程技术网

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

Swift 错误:无法调用非函数类型的值,swift,xib,Swift,Xib,我正在尝试对UIViewController nib注册进行扩展 因此,与PastOrdersViewControllernibName:PastOrdersViewController不同,bundle:nil我们可以执行如下操作 extension UIViewController { func loadNib(vc: UIViewController,nibName: String) -> UIViewController{ return vc(nibName: n

我正在尝试对UIViewController nib注册进行扩展

因此,与PastOrdersViewControllernibName: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”的值


错误发生的原因是vc参数指向UIViewController的实例,以及该方法看起来像是要调用控制器类上的初始值设定项

您可以使用Self并删除第一个参数,这将使loadFromNib方法变得非常简单。您可以进行的另一个优化是将nib名称声明为可选,并将其默认值设置为nil:

然后您就可以很好地使用如下方法:

let vc = MyViewController.loadFromNib() // loads from MyViewController.nib
,或


为什么要传递视图控制器?您是否正在尝试传递视图控制器类型并获取该类型的实例?我正在寻找类似PastViewController.loadNib@RakeshashAstrih的解决方案该方法如何使其更小?它已经是单行代码了。如果nibBundle为nil,则唯一要减少的是一个参数。这就是你想要达到的目标吗?我只是想把代码弄干,我们怎么做?我不明白。干杯:这就是我想要的
let vc = MyViewController.loadFromNib() // loads from MyViewController.nib
let vc = MyViewController.loadFromNib("Custom") // loads from Custom.nib