iOS 自定義代碼段模板(CodeSnippets)和文件模板 (.xctemplate)

俗話說(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)注明出處匾浪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皇帮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛋辈,更是在濱河造成了極大的恐慌属拾,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冷溶,死亡現(xiàn)場(chǎng)離奇詭異渐白,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逞频,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門纯衍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人虏劲,你說(shuō)我怎么就攤上這事托酸。” “怎么了柒巫?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵励堡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我堡掏,道長(zhǎng)应结,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任泉唁,我火速辦了婚禮鹅龄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亭畜。我一直安慰自己扮休,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布拴鸵。 她就那樣靜靜地躺著玷坠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劲藐。 梳的紋絲不亂的頭發(fā)上八堡,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音聘芜,去河邊找鬼兄渺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛汰现,可吹牛的內(nèi)容都是我干的挂谍。 我是一名探鬼主播叔壤,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凳兵!你這毒婦竟也來(lái)了百新?” 一聲冷哼從身側(cè)響起企软,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庐扫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后仗哨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體形庭,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年厌漂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萨醒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苇倡,死狀恐怖富纸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旨椒,我是刑警寧澤晓褪,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站综慎,受9級(jí)特大地震影響涣仿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜示惊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一好港、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧米罚,春花似錦钧汹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至糊肠,卻和暖如春辨宠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背货裹。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工嗤形, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弧圆。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓赋兵,卻偏偏與公主長(zhǎng)得像笔咽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霹期,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容