iOS 自定義代碼段模板(CodeSnippets)和文件模板 (.xctemplate)
俗話說“工欲善其事,必先利其器”,寫代碼的時候,我們經常會重復一些代碼或者項目結構,很多時候我都是重復的去寫,其實這是最笨的一種方法,之前也在Xcode里面添加過一些自定義代碼塊和文件模板,但是都沒怎么使用過,相信大部分的同學都知道怎么去添加,但是還是做個記錄吧,給跟我一樣不經常使用的同學一些參考,對我們寫代碼的效率提升還是挺有幫助的。
1.自定義代碼塊
在寫代碼的時候,我們經常要定義一些屬性,例如:
@property (nonatomic, copy) NSString *name;
@property (nonatomic, weak) id <UITableViewDelegate> delegate;
一般我都是自己手動的去寫,每次都要從頭寫一遍,其實Xcode中可以自定義一些常用的代碼塊,通過輸入快捷方式來補全代碼,這樣會減少很多工作量。
例如我們想把上面的字符串屬性的代碼塊通過輸入一個快捷方式 strp 來自動補全,步驟如下:
-
先在.h中輸入
@property (nonatomic, copy) NSString *<#name#>因為字符串屬性 @property (nonatomic, copy) NSString * 這一段都是固定的,只有最后的一個屬性名稱是需要我們修改的,把要修改的地方加上 <#占位符#> ,到時候我們只要修改占位符中的內容就行了。
2.在Xcode右下角找到如下圖所示的代碼塊模塊:
代碼塊
選中上面的代碼段,拖入其中,會彈出下面的窗口:
代碼塊2
Title是標題,描述代碼塊內容
platform是針對哪個平臺,選All就可以了。
Language是語言。
Completeion Shortcut是快捷方式,當我們輸入這個設置的快捷方式時,Xcode會自動補全代碼。
Completion Scopes代表代碼塊的范圍,比如我們添加的字符串屬性就是在.h文件中的interface這個范圍內才會自動補全
將內容補充完整,如下:
補充完整
點擊“done“之后在代碼塊模塊中就多出了一個代碼片段,如下圖:
代碼片段
保存之后,以后再寫字符串屬性的時候,就可以直接通過輸入 strp ,這個時候就可以看到Xcode自動補全的代碼塊了,直接回車修改一下后面的屬性名就行了。
自動補全
對于經常要重復寫的代碼塊,比如屬性,注釋等,可以通過上面的方法來通過一個快捷鍵自動補全,有的時候會方便很多。
其實,Xcode的所有代碼模板是用一個plist格式xml文件描述的,這文件存儲在Xcode的安裝目錄:
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
自己定義的代碼塊是在以下目錄下:
~/Library/Developer/Xcode/UserData/CodeSnippets/
感興趣的同學可以自己去研究一下。
2.自定義文件模板
當我們在項目中創建一個新的ViewController時,.m文件中一般都會已經存在下面這段代碼:
.m代碼
這是系統的UIViewController文件的模板,為我們添加了一些代碼,省去了我們的部分工作,但是一般自定義的ViewController中我們都會有一些我們自己習慣的常見模塊,比如下面是水哥的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 {
}
/** 加載數據 */
- (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
如果這些代模塊注釋每次都要重新寫的話,顯然是比較麻煩的,我們可以通過自定義一個ViewController的文件模板來自動生成這些代碼。
-
Xcode的文件模板路徑一般在下面這個目錄:(我的是Xcode8.2)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates進入上面這個路徑,可以看到如下所以的目錄結構:
??
目錄結構
如果我們選擇創建一個新文件,可以看到每個目錄對應的正好是創建文件的不同模塊,如下圖:
創建文件
在 File Templates 下面新建一個我們自己的文件夾 Custom 。如果要自己創建這些文件模板的話會比較麻煩,所以我們直接從 Source 文件夾下面,復制一份 Cocoa Touch Class.xctemplate 到 Custom 文件夾中來進行修改,將 Cocoa Touch Class.xctemplate 改成我們自己的名字,例如: SG Touch Class.xctemplate 。進入 SG Touch Class.xctemplate 可以看到其中有非常多的文件模板:
文件模板
因為我們這個例子只要說明ViewController的模板是如何生成的,其他的都是同一個道理,我們只需要修改下面的內容:
UIViewControllerObjective-C
UIViewControllerSwift
UIViewControllerXIBObjective-C
UIViewControllerXIBSwift
//模板的圖標,可以自己用圖標進行替換
TemplateIcon.png
TemplateIcon@2x.png
//模板配置文件,這個文件是修改的重點
TemplateInfo.plist
可以把其他不需要的文件都刪除,把文件夾的名字前綴改成自己的命名 ,最后剩下的如下圖:
自定義模板
進入SGViewControllerObjective-C文件夾,先修改.h文件:
___IMPORTHEADER_cocoaTouchSubclass___
@interface ___FILEBASENAMEASIDENTIFIER___ : ___VARIABLE_cocoaTouchSubclass___
@end
改成:
___IMPORTHEADER_cocoaTouchSubclass___
@interface ___FILEBASENAMEASIDENTIFIER___ : UIViewController
@end
___VARIABLE_cocoaTouchSubclass___ 在生成文件的時候會自動替換為我們的類名,如果不改成UIViewController的話,生成的.h文件中,將會是:
@interface ___FILEBASENAMEASIDENTIFIER___ : SGViewController
再修改.m文件,將.m中的內容替換成我們自定義的代碼模塊:
- (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 {
}
/** 加載數據 */
- (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四個配置,對應的是我們創建文件時候的四個選項,如下圖:
創建文件選項
我們只需要修改下面的內容:(注意這里的 SGViewController 需要與上面創建的文件夾 SGViewControllerObjective-C 前面部分一致)
TemplateInfo.plist修改
修改之后保存,在項目中選擇創建一個新文件,可以看到下面多出了我們自定義的模板:
創建新文件
選擇 SG Touch Class ,點擊Next
模板
在 Subclass of 中填入 SGViewController ,因為我們修改的是不帶XIB的模板,所以不要勾選創建XIB的選項,點擊Next ,生成的新的文件中,就已經存在我們自己定義的代碼模板了。
按照同樣的方式,修改其它三個文件夾中的.h和.m文件就可以了。
總結
Xcode中還有很多這種自定義的模板,比如項目的模板。平時的話沒有仔細的去研究,其實如果能夠深入研究一下,能更加了解Xcode的一些 小技巧 ,做一個聰明的懶人,在一些重復的事情上盡量去想想有沒有辦法“偷懶”!
來自:http://www.jianshu.com/p/376f372497b5