歡迎光臨
每天分享高質量文章

iOS自定義代碼段模板(CodeSnippets)和檔案模板(.xctemplate)

作者:水哥

鏈接:https://www.jianshu.com/p/376f372497b5


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

1、自定義代碼塊

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

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


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


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


1、先在.h中輸入
@property (nonatomic, copy) NSString *
因為字串屬性@property (nonatomic, copy) NSString *這一段都是固定的,只有最後的一個屬性名稱是需要我們修改的,把要修改的地方加上,到時候我們只要修改占位符中的內容就行了。


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



選中上面的代碼段,拖入其中,會彈出下麵的視窗:


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檔案中一般都會已經存在下麵這段代碼:



這是系統的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.xctemplateCustom檔案夾中來進行修改,將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前面部分一致)

修改之後儲存,在專案中選擇創建一個新檔案,可以看到下麵多出了我們自定義的模板:

選擇SG Touch Class,點擊Next

Subclass of中填入SGViewController,因為我們修改的是不帶XIB的模板,所以不要勾選創建XIB的選項,點擊Next ,生成的新的檔案中,就已經存在我們自己定義的代碼模板了。

按照同樣的方式,修改其它三個檔案夾中的.h和.m檔案就可以了。

總結

Xcode中還有很多這種自定義的模板,比如專案的模板。平時的話沒有仔細的去研究,其實如果能夠深入研究一下,能更加瞭解Xcode的一些小技巧,做一個聰明的懶人,在一些重覆的事情上儘量去想想有沒有辦法“偷懶”!


編號314,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂