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

俗話說“工欲善其事咸作,必先利其器”,寫代碼的時(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ǔ)全灭必,步驟如下:

  1. 先在.h中輸入
    @property (nonatomic, copy) NSString *<#name#>
    因?yàn)樽址畬傩?code>@property (nonatomic, copy) NSString *這一段都是固定的,只有最后的一個(gè)屬性名稱是需要我們修改的乃摹,把要修改的地方加上<#占位符#>禁漓,到時(shí)候我們只要修改占位符中的內(nèi)容就行了。

2.在Xcode右下角找到如下圖所示的代碼塊模塊:


代碼塊

選中上面的代碼段孵睬,拖入其中播歼,會(huì)彈出下面的窗口:

代碼塊2

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ǔ)充完整减响,如下:

補(bǔ)充完整

點(diǎn)擊“done“之后在代碼塊模塊中就多出了一個(gè)代碼片段,如下圖:

代碼片段

保存之后郭怪,以后再寫字符串屬性的時(shí)候支示,就可以直接通過輸入strp,這個(gè)時(shí)候就可以看到Xcode自動(dòng)補(bǔ)全的代碼塊了移盆,直接回車修改一下后面的屬性名就行了悼院。

自動(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)存在下面這段代碼:

.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.
}
#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)生成這些代碼感昼。

  1. 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è)目錄對應(yīng)的正好是創(chuàng)建文件的不同模塊定嗓,如下圖:

創(chuàng)建文件

File Templates下面新建一個(gè)我們自己的文件夾Custom。如果要自己創(chuàng)建這些文件模板的話會(huì)比較麻煩萍桌,所以我們直接從Source文件夾下面宵溅,復(fù)制一份Cocoa Touch Class.xctemplateCustom文件夾中來進(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)卿捎,如下圖:

創(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í)的話沒有仔細(xì)的去研究,其實(shí)如果能夠深入研究一下捶码,能更加了解Xcode的一些小技巧羽氮,做一個(gè)聰明的懶人,在一些重復(fù)的事情上盡量去想想有沒有辦法“偷懶”惫恼!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乏苦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尤筐,更是在濱河造成了極大的恐慌,老刑警劉巖洞就,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盆繁,死亡現(xiàn)場離奇詭異,居然都是意外死亡旬蟋,警方通過查閱死者的電腦和手機(jī)油昂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倾贰,“玉大人冕碟,你說我怎么就攤上這事〈艺悖” “怎么了安寺?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長首尼。 經(jīng)常有香客問我挑庶,道長,這世上最難降的妖魔是什么软能? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任迎捺,我火速辦了婚禮,結(jié)果婚禮上查排,老公的妹妹穿的比我還像新娘凳枝。我一直安慰自己,他們只是感情好跋核,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布岖瑰。 她就那樣靜靜地躺著,像睡著了一般砂代。 火紅的嫁衣襯著肌膚如雪锭环。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天泊藕,我揣著相機(jī)與錄音辅辩,去河邊找鬼难礼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玫锋,可吹牛的內(nèi)容都是我干的蛾茉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撩鹿,長吁一口氣:“原來是場噩夢啊……” “哼谦炬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起节沦,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤键思,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后甫贯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吼鳞,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年叫搁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赔桌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渴逻,死狀恐怖疾党,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惨奕,我是刑警寧澤雪位,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站梨撞,受9級特大地震影響茧泪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聋袋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一队伟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幽勒,春花似錦嗜侮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咪惠,卻和暖如春击吱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遥昧。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工覆醇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朵纷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓永脓,卻偏偏與公主長得像袍辞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子常摧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

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