俗話說“工欲善其事咸作,必先利其器”,寫代碼的時(shí)候,我們經(jīng)常會(huì)重復(fù)一些代碼或者項(xiàng)目結(jié)構(gòu)及刻,很多時(shí)候我都是重復(fù)的去寫玖像,其實(shí)這是最笨的一種方法翠肘,之前也在Xcode里面添加過一些自定義代碼塊和文件模板幅慌,但是都沒怎么使用過骗随,相信大部分的同學(xué)都知道怎么去添加,但是還是做個(gè)記錄吧艺挪,給跟我一樣不經(jīng)常使用的同學(xué)一些參考不翩,對我們寫代碼的效率提升還是挺有幫助的。
1.自定義代碼塊
在寫代碼的時(shí)候,我們經(jīng)常要定義一些屬性慌盯,例如:
@property (nonatomic, copy) NSString *name;
@property (nonatomic, weak) id <UITableViewDelegate> delegate;
一般我都是自己手動(dòng)的去寫,每次都要從頭寫一遍掂器,其實(shí)Xcode中可以自定義一些常用的代碼塊亚皂,通過輸入快捷方式來補(bǔ)全代碼,這樣會(huì)減少很多工作量国瓮。
例如我們想把上面的字符串屬性的代碼塊通過輸入一個(gè)快捷方式strp
來自動(dòng)補(bǔ)全灭必,步驟如下:
- 先在.h中輸入
@property (nonatomic, copy) NSString *<#name#>
因?yàn)樽址畬傩?code>@property (nonatomic, copy) NSString *這一段都是固定的,只有最后的一個(gè)屬性名稱是需要我們修改的乃摹,把要修改的地方加上<#占位符#>
禁漓,到時(shí)候我們只要修改占位符中的內(nèi)容就行了。
2.在Xcode右下角找到如下圖所示的代碼塊模塊:
選中上面的代碼段孵睬,拖入其中播歼,會(huì)彈出下面的窗口:
Title是標(biāo)題,描述代碼塊內(nèi)容
platform是針對哪個(gè)平臺(tái)掰读,選All就可以了秘狞。
Language是語言。
Completeion Shortcut是快捷方式蹈集,當(dāng)我們輸入這個(gè)設(shè)置的快捷方式時(shí)烁试,Xcode會(huì)自動(dòng)補(bǔ)全代碼。
Completion Scopes代表代碼塊的范圍拢肆,比如我們添加的字符串屬性就是在.h文件中的interface這個(gè)范圍內(nèi)才會(huì)自動(dòng)補(bǔ)全
將內(nèi)容補(bǔ)充完整减响,如下:
點(diǎn)擊“done“之后在代碼塊模塊中就多出了一個(gè)代碼片段,如下圖:
保存之后郭怪,以后再寫字符串屬性的時(shí)候支示,就可以直接通過輸入strp
,這個(gè)時(shí)候就可以看到Xcode自動(dòng)補(bǔ)全的代碼塊了移盆,直接回車修改一下后面的屬性名就行了悼院。
對于經(jīng)常要重復(fù)寫的代碼塊,比如屬性咒循,注釋等据途,可以通過上面的方法來通過一個(gè)快捷鍵自動(dòng)補(bǔ)全,有的時(shí)候會(huì)方便很多叙甸。
其實(shí)颖医,Xcode的所有代碼模板是用一個(gè)plist格式xml文件描述的,這文件存儲(chǔ)在Xcode的安裝目錄:
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
自己定義的代碼塊是在以下目錄下:
~/Library/Developer/Xcode/UserData/CodeSnippets/
感興趣的同學(xué)可以自己去研究一下裆蒸。
2.自定義文件模板
當(dāng)我們在項(xiàng)目中創(chuàng)建一個(gè)新的ViewController時(shí)熔萧,.m文件中一般都會(huì)已經(jīng)存在下面這段代碼:
這是系統(tǒng)的UIViewController文件的模板,為我們添加了一些代碼,省去了我們的部分工作佛致,但是一般自定義的ViewController中我們都會(huì)有一些我們自己習(xí)慣的常見模塊贮缕,比如下面是水哥的ViewController中常見模塊:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setupUI];
[self loadData];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Initial Methods
/** 視圖初始化 */
- (void)setupUI {
}
/** 加載數(shù)據(jù) */
- (void)loadData {
}
#pragma mark - Setter & Getter
#pragma mark - Target Mehtods
#pragma mark - Notification Method
#pragma mark - Private Method
#pragma mark - Public Method
#pragma mark - UITableView Delegate &Datasource
#pragma mark - Other Delegate
如果這些代模塊注釋每次都要重新寫的話,顯然是比較麻煩的俺榆,我們可以通過自定義一個(gè)ViewController的文件模板來自動(dòng)生成這些代碼感昼。
- Xcode的文件模板路徑一般在下面這個(gè)目錄:(我的是Xcode8.2)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
進(jìn)入上面這個(gè)路徑,可以看到如下所以的目錄結(jié)構(gòu):
如果我們選擇創(chuàng)建一個(gè)新文件罐脊,可以看到每個(gè)目錄對應(yīng)的正好是創(chuàng)建文件的不同模塊定嗓,如下圖:
在File Templates
下面新建一個(gè)我們自己的文件夾Custom
。如果要自己創(chuàng)建這些文件模板的話會(huì)比較麻煩萍桌,所以我們直接從Source
文件夾下面宵溅,復(fù)制一份Cocoa Touch Class.xctemplate
到Custom
文件夾中來進(jìn)行修改,將Cocoa Touch Class.xctemplate
改成我們自己的名字上炎,例如:SG Touch Class.xctemplate
恃逻。進(jìn)入SG Touch Class.xctemplate
可以看到其中有非常多的文件模板:
因?yàn)槲覀冞@個(gè)例子只要說明ViewController的模板是如何生成的,其他的都是同一個(gè)道理藕施,我們只需要修改下面的內(nèi)容:
UIViewControllerObjective-C
UIViewControllerSwift
UIViewControllerXIBObjective-C
UIViewControllerXIBSwift
//模板的圖標(biāo)辛块,可以自己用圖標(biāo)進(jìn)行替換
TemplateIcon.png
TemplateIcon@2x.png
//模板配置文件,這個(gè)文件是修改的重點(diǎn)
TemplateInfo.plist
可以把其他不需要的文件都刪除,把文件夾的名字前綴改成自己的命名 铅碍,最后剩下的如下圖:
進(jìn)入SGViewControllerObjective-C文件夾,先修改.h文件:
___IMPORTHEADER_cocoaTouchSubclass___
@interface ___FILEBASENAMEASIDENTIFIER___ : ___VARIABLE_cocoaTouchSubclass___
@end
改成:
___IMPORTHEADER_cocoaTouchSubclass___
@interface ___FILEBASENAMEASIDENTIFIER___ : UIViewController
@end
___VARIABLE_cocoaTouchSubclass___
在生成文件的時(shí)候會(huì)自動(dòng)替換為我們的類名润绵,如果不改成UIViewController的話,生成的.h文件中胞谈,將會(huì)是:
@interface ___FILEBASENAMEASIDENTIFIER___ : SGViewController
再修改.m文件尘盼,將.m中的內(nèi)容替換成我們自定義的代碼模塊:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setupUI];
[self loadData];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Initial Methods
/** 視圖初始化 */
- (void)setupUI {
}
/** 加載數(shù)據(jù) */
- (void)loadData {
}
#pragma mark - Setter & Getter
#pragma mark - Target Mehtods
#pragma mark - Notification Method
#pragma mark - Private Method
#pragma mark - Public Method
#pragma mark - UITableView Delegate &Datasource
#pragma mark - Other Delegate
最后打開TemplateInfo.plist
來修改其中的配置,在Options
中有Item0-Item3四個(gè)配置烦绳,對應(yīng)的是我們創(chuàng)建文件時(shí)候的四個(gè)選項(xiàng)卿捎,如下圖:
我們只需要修改下面的內(nèi)容:(注意這里的SGViewController
需要與上面創(chuàng)建的文件夾SGViewControllerObjective-C
前面部分一致)
修改之后保存,在項(xiàng)目中選擇創(chuàng)建一個(gè)新文件径密,可以看到下面多出了我們自定義的模板:
選擇SG Touch Class
午阵,點(diǎn)擊Next
在Subclass of
中填入SGViewController
,因?yàn)槲覀冃薷牡氖遣粠IB的模板享扔,所以不要勾選創(chuàng)建XIB的選項(xiàng)底桂,點(diǎn)擊Next ,生成的新的文件中惧眠,就已經(jīng)存在我們自己定義的代碼模板了籽懦。
按照同樣的方式,修改其它三個(gè)文件夾中的.h和.m文件就可以了氛魁。
總結(jié)
Xcode中還有很多這種自定義的模板暮顺,比如項(xiàng)目的模板厅篓。平時(shí)的話沒有仔細(xì)的去研究,其實(shí)如果能夠深入研究一下捶码,能更加了解Xcode的一些小技巧羽氮,做一個(gè)聰明的懶人,在一些重復(fù)的事情上盡量去想想有沒有辦法“偷懶”惫恼!