俗話說(shuō)“工欲善其事凫岖,必先利其器”,寫代碼的時(shí)候返咱,我們經(jīng)常會(huì)重復(fù)一些代碼或者項(xiàng)目結(jié)構(gòu)钥庇,很多時(shí)候我都是重復(fù)的去寫,其實(shí)這是最笨的一種方法咖摹,之前也在Xcode里面添加過(guò)一些自定義代碼塊和文件模板评姨,但是都沒(méi)怎么使用過(guò),相信大部分的同學(xué)都知道怎么去添加萤晴,但是還是做個(gè)記錄吧吐句,給跟我一樣不經(jīng)常使用的同學(xué)一些參考,對(duì)我們寫代碼的效率提升還是挺有幫助的店读。
1.自定義代碼塊
在寫代碼的時(shí)候嗦枢,我們經(jīng)常要定義一些屬性,例如:
@property (nonatomic, copy) NSString *name;
@property (nonatomic, weak) id <UITableViewDelegate> delegate;
一般我都是自己手動(dòng)的去寫屯断,每次都要從頭寫一遍文虏,其實(shí)Xcode中可以自定義一些常用的代碼塊侣诺,通過(guò)輸入快捷方式來(lái)補(bǔ)全代碼,這樣會(huì)減少很多工作量氧秘。
例如我們想把上面的字符串屬性的代碼塊通過(guò)輸入一個(gè)快捷方式strp來(lái)自動(dòng)補(bǔ)全年鸳,步驟如下:
先在.h中輸入
@property (nonatomic, copy) NSString *<#name#>
因?yàn)樽址畬傩訞property (nonatomic, copy) NSString *這一段都是固定的,只有最后的一個(gè)屬性名稱是需要我們修改的丸相,把要修改的地方加上<#占位符#>阻星,到時(shí)候我們只要修改占位符中的內(nèi)容就行了。
2.在Xcode右下角找到如下圖所示的代碼塊模塊:
代碼塊
選中上面的代碼段已添,拖入其中妥箕,會(huì)彈出下面的窗口:
代碼塊2
Title是標(biāo)題,描述代碼塊內(nèi)容
platform是針對(duì)哪個(gè)平臺(tái)更舞,選All就可以了畦幢。
Language是語(yǔ)言。
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ǔ)充完整黍瞧,如下:
補(bǔ)充完整
點(diǎn)擊“done“之后在代碼塊模塊中就多出了一個(gè)代碼片段,如下圖:
代碼片段
保存之后原杂,以后再寫字符串屬性的時(shí)候印颤,就可以直接通過(guò)輸入strp,這個(gè)時(shí)候就可以看到Xcode自動(dòng)補(bǔ)全的代碼塊了穿肄,直接回車修改一下后面的屬性名就行了年局。
自動(dòng)補(bǔ)全
對(duì)于經(jīng)常要重復(fù)寫的代碼塊,比如屬性咸产,注釋等矢否,可以通過(guò)上面的方法來(lái)通過(guò)一個(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)我們?cè)陧?xiàng)目中創(chuàng)建一個(gè)新的ViewController時(shí)验庙,.m文件中一般都會(huì)已經(jīng)存在下面這段代碼:
.m代碼
這是系統(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.}#pragmamark - Initial Methods/** 視圖初始化 */- (void)setupUI {}/** 加載數(shù)據(jù) */- (void)loadData {}#pragmamark - Setter & Getter#pragmamark - Target Mehtods#pragmamark - Notification Method#pragmamark - Private Method#pragmamark - Public Method#pragmamark - UITableView Delegate &Datasource#pragmamark - Other Delegate復(fù)制代碼
如果這些代模塊注釋每次都要重新寫的話膳沽,顯然是比較麻煩的,我們可以通過(guò)自定義一個(gè)ViewController的文件模板來(lái)自動(dòng)生成這些代碼。
Xcode的文件模板路徑一般在下面這個(gè)目錄:(我的是Xcode8.2)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
進(jìn)入上面這個(gè)路徑挑社,可以看到如下所以的目錄結(jié)構(gòu):
目錄結(jié)構(gòu)
如果我們選擇創(chuàng)建一個(gè)新文件陨界,可以看到每個(gè)目錄對(duì)應(yīng)的正好是創(chuàng)建文件的不同模塊,如下圖:
創(chuàng)建文件
在File Templates下面新建一個(gè)我們自己的文件夾Custom痛阻。如果要自己創(chuàng)建這些文件模板的話會(huì)比較麻煩菌瘪,所以我們直接從Source文件夾下面,復(fù)制一份Cocoa Touch Class.xctemplate到Custom文件夾中來(lái)進(jìn)行修改阱当,將Cocoa Touch Class.xctemplate改成我們自己的名字俏扩,例如:SG Touch Class.xctemplate。進(jìn)入SG Touch Class.xctemplate可以看到其中有非常多的文件模板:
文件模板
因?yàn)槲覀冞@個(gè)例子只要說(shuō)明ViewController的模板是如何生成的弊添,其他的都是同一個(gè)道理录淡,我們只需要修改下面的內(nèi)容:
UIViewControllerObjective-CUIViewControllerSwiftUIViewControllerXIBObjective-CUIViewControllerXIBSwift復(fù)制代碼
//模板的圖標(biāo),可以自己用圖標(biāo)進(jìn)行替換TemplateIcon.pngTemplateIcon@2x.png//模板配置文件,這個(gè)文件是修改的重點(diǎn)TemplateInfo.plist復(fù)制代碼
可以把其他不需要的文件都刪除油坝,把文件夾的名字前綴改成自己的命名 嫉戚,最后剩下的如下圖:
自定義模板
進(jìn)入SGViewControllerObjective-C文件夾,先修改.h文件:
___IMPORTHEADER_cocoaTouchSubclass___@interface___FILEBASENAMEASIDENTIFIER___ : ___VARIABLE_cocoaTouchSubclass___@end復(fù)制代碼
改成:
___IMPORTHEADER_cocoaTouchSubclass___@interface___FILEBASENAMEASIDENTIFIER___ :UIViewController@end復(fù)制代碼
___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.}#pragmamark - Initial Methods/** 視圖初始化 */- (void)setupUI {}/** 加載數(shù)據(jù) */- (void)loadData {}#pragmamark - Setter & Getter#pragmamark - Target Mehtods#pragmamark - Notification Method#pragmamark - Private Method#pragmamark - Public Method#pragmamark - UITableView Delegate &Datasource#pragmamark - Other Delegate復(fù)制代碼
最后打開TemplateInfo.plist來(lái)修改其中的配置瞬女,在Options中有Item0-Item3四個(gè)配置窍帝,對(duì)應(yīng)的是我們創(chuàng)建文件時(shí)候的四個(gè)選項(xiàng),如下圖:
創(chuàng)建文件選項(xiàng)
我們只需要修改下面的內(nèi)容:(注意這里的SGViewController需要與上面創(chuàng)建的文件夾SGViewControllerObjective-C前面部分一致)
TemplateInfo.plist修改
修改之后保存诽偷,在項(xiàng)目中選擇創(chuàng)建一個(gè)新文件盯桦,可以看到下面多出了我們自定義的模板:
創(chuàng)建新文件
選擇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í)的話沒(méi)有仔細(xì)的去研究羽利,其實(shí)如果能夠深入研究一下,能更加了解Xcode的一些小技巧刊懈,做一個(gè)聰明的懶人这弧,在一些重復(fù)的事情上盡量去想想有沒(méi)有辦法“偷懶”
作者:水哥iOS
鏈接:https://juejin.cn/post/6844903466268098568
來(lái)源:掘金
著作權(quán)歸作者所有娃闲。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處匾浪。