你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 一款Xcode合法插件EasyCode,快速生成代碼

一款Xcode合法插件EasyCode,快速生成代碼

編輯:IOS開發基礎

新制了一款Xcode“合法”插件,之所以說合法,是因為Xcode 8開始禁用了之前所有的第三方插件,新開發的插件要通過安全性檢驗,必須使用官方的Xcode Editor Extension來做。這款EasyCode插件就是基於Extension來實現,現階段Extension雖然只提供了「少得可憐」的API,但至少Xcode團隊邁出了羞澀的第一步。

先貼上 GitHub地址 :https://github.com/music4kid/EasyCode-Xcode。

正題

Extension現有的API只能獲取到當前正在編輯的文件內容,沒有再多的功能了(⊙﹏⊙)。幸運的是我們可以對當前文件內容做修改,正好之前寫FastStub的時候,有過一個idea: 能通過字母縮寫的方式快速插入一段代碼 。

起因是因為XCode當前的自動補全功能還是不夠強大,比如平常寫UIViewController的時候經常需要寫如下代碼:

- (void)viewDidLoad {
    [super viewDidLoad];
}

在Xcode 8當中必須先輸入-(void)才能出現補全提示,也就是說函數的返回值必須嚴格匹配,而且必要的[super viewDidLoad];也不會幫你輸入。我個人感覺需要一種更快速的輸入方式來增強體驗。

當然我們可以通過Xcode自帶的Code Snippet Library來生成一個快捷方式,但這個功能我每次很難操作成功,而且把每個常用的代碼塊都建一次快捷方式比較麻煩,寫個插件一次搞定省事,而且程序員更懂程序員。

簡單來說,EasyCode遵循如下規則, 取對應函數單詞的首字母進行匹配(取前3個單詞,不夠取2個) 。

比如 viewDidLoad 拆解成 view Did Load 三個單詞,就對應vdl這三個字母的縮寫,那麼在Xcode當中只要通過菜單或者快捷鍵觸發插件功能,就能把vdl替換成上述的代碼塊。

同理輸入vda就可以生成

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

輸入drm

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

輸入sio

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{    <#code#>}

輸入htw

- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event
{    <#code#>}

輸入dr

- (void)drawRect:(CGRect)rect
{    <#code#>}

GCD當中的幾個API經常會遇到,縮寫後會有沖突,做了點調整

輸入dafm( d ispatch af ter m ain queue)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{        <#code to be executed after a specified delay#>
    });

輸入dasm( d ispatch as ync m ain queue)

dispatch_async(dispatch_get_main_queue(), ^{        <#code#>
    });

猜猜dafg,dafm代表啥?

還有一些零碎的快捷代碼,需要一些記憶:

del對應

([UIApplication sharedApplication].delegate)

v對應

- (void)<#method#>

p對應

@property (nonatomic, strong) <#type#>         <#name#>

w對應

__weak __typeof(self) wself = self;

n對應

[NSNotificationCenter defaultCenter]

u對應

[NSUserDefaults standardUserDefaults]

img對應

[UIImage imageNamed:<#(nonnull NSString *)#>];

bun對應

[[NSBundle mainBundle] pathForResource:<#(nullable NSString *)#> ofType:<#(nullable NSString *)#>];

上面這些都是我平常寫代碼時最不願意敲的部分,純粹是手指運動,可以自動生成之後就方便多了。

這款插件還可以快速生成模板代碼。

比如輸入btn可以生成:

UIButton *btn = [UIButton new];
[btn setBackgroundColor:<#(UIColor * _Nullable)#>];
[btn setTitle:<#(nullable NSString *)#> forState:UIControlStateNormal];
[btn addTarget:<#(nullable id)#> action:<#(nonnull SEL)#> forControlEvents:UIControlEventTouchUpInside];
[<#self#> addSubview:btn];<#self.btn#> = btn;

經常寫UIButton的童鞋肯定明白上面這段代碼如果一個個敲有多無趣。

輸入lb:

UILabel *lb = [UILabel new];
lb.text = <#text#>;lb.textColor = <#(UIColor * _Nullable)#>;lb.font = [UIFont systemFontOfSize:<#(CGFloat)#>];
lb.backgroundColor = [UIColor clearColor];
[<#self#> addSubview:lb];<#self.lb#> = lb;

輸入iv,不用我說大家應該也能想到會生成什麼了。

還有其他一些類似的縮寫,現階段添加了一些個人覺得比較常用的API或者縮寫,如果不符合自己的記憶習慣的話,可以fork項目後自己配置快捷方式。

這款插件的目標是讓大家少敲一些重復代碼,初步使用下來感覺還比較愉悅,適合既勤快(記得住API)又愛偷懶(懶得敲完整API)的同學。

後期如果開放了GUI交互,應該能變得更實用。

安裝方式:

下載代碼後通過Xcode8運行即可,運行前要用自己的開發者證書對Target簽名。

後面如果Xcode如果能開放更多的API,再考慮放到AppStore上。

使用方式:

通過Xcode建立菜單項的快捷鍵(我個人配置的是cmd+.):

在縮寫字母的後面按快捷鍵:

ec01.gif

任何問題或者有常用代碼需要添加的,歡迎去github提issue。

同時期待後續Xcode團隊能開放更多的API,現在真心不夠用,想遷移FastStub完全沒辦法,迫切需要:

  1. 讀取整個工程文件的權限

  2. GUI交互

:coffee:?orz = International Coffee Begging Protocol = ICBP


文章轉自 MrPeak技術分享

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved