在Swift 中 ViewController 默認構造方法不關聯同名的xib文件
在使用OC的時候,調用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() {
// 獲取當前Class的名字,在swift中class名字前會加入Module名字,所以這里以'.'划分,取'.'后面的字符串.
super.init(nibName: (self.classForCoder.description() as NSString).componentsSeparatedByString(".")[1] as NSString, bundle: NSBundle.mainBundle())
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
