Swift 中 ViewController 默许构造方法不关联同名的xib文件
Swift 中 ViewController 默认构造方法不关联同名的xib文件
在使用objective c的时候,调用ViewController的默认构造函数,会自动关联到一个与ViewController名字相同的xib文件上,这样无疑方便了开发者,减少了代码量。但不知道为什么,在swift中,新建ViewController实例,不在默认关联xib,一定要开发者指定xib的名字,这对于有代码洁癖的人是不可接受的,因为通常情况下,xib的名字一定是和ViewController的名字相同的。本文讲介绍一种方案去解决这个问题。
Objective C中的写法
TwoViewController *v = [[TwoViewController alloc] init]; //这样会把TwoViewController默认关联到TwoViewController.xib上 //等同调用了方法 TwoViewController *v = [[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];
Swift中的写法
let v = TwoViewController() //不会关联TwoViewController.xib文件 //一定要指定xib文件 let v = TwoViewController(nibName: "TwoViewController", bundle: nil)
我们改怎样让TwoViewController()去找同名字的xib文件呢,其实原来很简单,重写init方法就行了, 新建BaseViewController.swift 重写init方法,其他的ViewController继续于BaseViewController。
override init() { super.init(nibName: (self.classForCoder.description() as NSString) .componentsSeparatedByString(".")[1] as NSString, bundle: NSBundle.mainBundle()) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
实现原来
获取当前Class的名字,在swift中class名字前会加入Module名字,所以这里以'.'划分,取'.'后面的字符串.