描述:
我們有沒有好奇過,我們寫代碼的時候輸入幾個字母系統就會提示一些相應的代碼塊。比如- (instancetype)initWithFrame:(CGRect)frame等。但是還有些我們常用的代碼塊系統是沒有的。這個時候我們就需要自己自定義一些代碼塊了。
自定義代碼塊的方法:
1.首先在項目中寫入自己想創建成為Code Snippets的代碼塊。如:
@property (nonatomic, assign) <#Type#> <#name#>;
2.選中代碼塊點擊鼠標右鍵選中create Code snippet 選項。
3.進入編輯代碼塊的界面。
4.進行代碼塊命名,我一般都是用My做前綴,后面是名稱,需要占位的代碼可以用特殊格式寫<#type#>。
5.最后點擊Done完成。
補充說明一下下面的幾個選項:
1.Language:選擇開發語言。
2.Platform:可用于的平臺iOS、macOS、tvOS、watchOS。
3.Completion:和代碼塊的名稱要一樣,否則引用的時候打不出來。
4.Availabililty:在哪些地方可以調用出代碼塊,比如有的代碼塊適用于.h文件,有的代碼塊適用于.m文件,他們的代碼塊名稱很相似,為了引用的時候不都彈出來干擾選擇,可以設置這個選項。規定其可用范圍。
常用的自定義代碼塊:
屬性構建:
@property (nonatomic, assign) <#Type#> <#name#>;
@property (nonatomic, copy) <#Type#> *<#name#>;
@property (nonatomic, strong) <#Type#> *<#name#>;
@property (nonatomic, weak) <#Type#> *<#name#>;
@property (nonatomic, copy) void (^<#name#>Block) (<#name#>);
強弱Self:
__weak __typeof(self) weakSelf = self;
__strong __typeof(self) strongSelf = weakSelf;
懶加載:
- (<#type#> *)<#name#> {
if (!_<#property#>) {
}
return _<#property#>;
}
單例:
static <#ClassSingle#> *_sharedSingleton = nil;
static dispatch_once_t _onceToken;
+ (instancetype)shareSingleton {
dispatch_once(&onceToken, ^{
if (_sharedSingleton == nil) {
_sharedSingleton = [[super allocWithZone:NULL] init];
}
});
return _sharedSingleton;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
return [<#ClassSingle#> shareSingleton];
}
- (id)copyWithZone:(nullable NSZone *)zone {
return [<#ClassSingle#> shareSingleton];
}
- (id)mutableCopyWithZone:(nullable NSZone *)zone {
return [<#ClassSingle#> shareSingleton];
}
- (void)destorySingle {
_onceToken = 0;
_sharedSingleton = nil;
}
還有一些關于UI快速創建的,快速創建UILabel,UIButton,UITableView,UICollectionView等,一些快速構建約束的,就不一一列舉了。
問題:
這時候的的人可能會問,我也想搞一套這個東西,但是我一個一個的往上粘也太麻煩了,有沒有直接把寫好的一套的代碼塊直接挪到項目中去呢?
這個還真有。首先,我們要知道存放代碼塊的文件在哪,找到這個文件,將現有的代碼塊文件,放進這個文件夾中就可以了。在桌面(shift + command + G)復制下面的路徑回車。
文件路徑:
~/Library/Developer/Xcode/UserData/CodeSnippets
存放代碼塊的地址:
https://github.com/WarmLGZ/CodeSnippetsFile
總結:
這個代碼塊確實能提升我們的代碼效率,別人剛寫個UILabel你的一塊代碼都寫完了,就是這么省事。還有一次我Xcode升級了以后,我之前自己定義的一些代碼塊就沒有了。寫這個文章也為了保存一份文件,以防萬一。還有哪些不足和需要補充的地方望大家補充指教,必虛心學習。