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

Alica95P 7年前發布 | 15K 次閱讀 C語言 Xcode iOS開發 移動開發

俗話說“工欲善其事,必先利其器”,寫代碼的時候,我們經常會重復一些代碼或者項目結構,很多時候我都是重復的去寫,其實這是最笨的一種方法,之前也在Xcode里面添加過一些自定義代碼塊和文件模板,但是都沒怎么使用過,相信大部分的同學都知道怎么去添加,但是還是做個記錄吧,給跟我一樣不經常使用的同學一些參考,對我們寫代碼的效率提升還是挺有幫助的。

1.自定義代碼塊

在寫代碼的時候,我們經常要定義一些屬性,例如:

@property (nonatomic, copy) NSString *name;
@property (nonatomic, weak) id <UITableViewDelegate> delegate;

一般我都是自己手動的去寫,每次都要從頭寫一遍,其實Xcode中可以自定義一些常用的代碼塊,通過輸入快捷方式來補全代碼,這樣會減少很多工作量。

例如我們想把上面的字符串屬性的代碼塊通過輸入一個快捷方式 strp 來自動補全,步驟如下:

  1. 先在.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的文件模板來自動生成這些代碼。

  1. 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

 

 本文由用戶 Alica95P 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!