很好用的Xcode qmui-ios-codesnippets

qmui-ios-codesnippets

qmui-ios-codesnippets 是一個 QMUI 團隊日常工作中整理出來的用於 Xcode 的 iOS 通用代碼片段集,其中也包含若干專用於 QMUI for iOS 框架的代碼片段。

整理這個代碼片段集的初衷有以下幾點:

  1. 我們發現由於 Xcode 本身的功能不足,導致我們經常在重寫一些系統父類方法時容易忘了調用 super,從而出現一些很難排查的詭異bug。
  2. Xcode 雖然有模糊匹配的代碼提醒,但代碼提醒只能幫你寫方法名,而code snippets 還可以幫你填充一些默認的方法實現,或者直接移動光標到方法體內,省去幾次光標操作。
  3. 一些常用的寫法本身語法可能比較複雜,難以記憶,例如實現一個類的單例、使用 swizzle 來重寫系統控件的方法、block 在不同地方的語法不同等。
  4. 一些代碼本身看似簡單,但由於特別常用,所以使用 code snippets 可以大大節省時間。

使用方式

Xcode 的 Code Snippets 文件存放於 ~/Library/Developer/Xcode/UserData/CodeSnippets 目錄,只要直接把 *.codesnippets 文件放到這個目錄下(若沒有則自己創建),重啓 Xcode 即可生效。

爲了方便更新,建議直接將 QMUI iOS CodeSnippets clone 到這個目錄內(注意,不是在 CodeSnippets 裏創建一個 QMUI 的目錄,這裏不支持子目錄):


 

其中以 QM_ 前綴開頭的文件是通用的 Code Snippets,以 QMUI_ 前綴開頭的文件是專用於 QMUI for iOS 框架的代碼片段。在下方的快捷鍵彙總裏,QMUI 的代碼片段將會以QMUI的形式標記出來。

注意,Xcode 對每一段 Code Snippet 都有規定適用的語言(Objective-C、Objective-C++、Swift、...)和作用域(如 Class 的 Interface 定義內、Class 的 Implementation 內、方法體內、...),所以測試某段 Code Snippet 不生效時請注意你當前是否處於不匹配的位置。

快捷鍵彙總

NSObject

  • pa - 定義一個 assign 的 property
  • par - 定義一個 assign, readonly 的 property
  • pc - 定義一個 copy 的 property
  • ps - 定義一個 strong 的property
  • psr - 定義一個 strong, readonly 的property
  • pw - 定義一個 weak 的property
  • pwr - 定義一個 weak, readonly 的property
  • propertySwizzleAssign - 用 swizzle 的方式定義一個 assign 的property
  • propertySwizzleCopy - 用 swizzle 的方式定義一個 copy 的property
  • propertySwizzleStrong - 用 swizzle 的方式定義一個 strong 的property
  • propertySwizzleWeak - 用 swizzle 的方式定義一個 weak 的property
  • sharedInstance - 爲當前類創建一個實現單例功能的 sharedInstance 方法
  • exchangeImplementation - 重寫當前類的 load 方法並在其中用 swizzle 替換方法實現
  • exchangeImplementation_QMUI - 用 QMUI 重寫當前類的 load 方法並用 ExchangeImplementations() 函數替換方法的實現
  • exchangeMultipleImplementations_QMUI - 用 QMUI 重寫當前類的 load 方法並用 ExchangeImplementations()函數批量替換多個方法的實現
  • override_void_nonArgv - 用 QMUI 的 OverrideImplementation() 重寫指定 class 的某個無返回值、無參數的方法實現
  • override_void_argv - 用 QMUI 的 OverrideImplementation() 修改指定 class 的某個無返回值、帶一個參數的方法實現
  • override_return_nonA - 用 QMUI 的 OverrideImplementation() 修改指定 class 的某個帶返回值、無參數的方法實現
  • override_return_argv - 用 QMUI 的 OverrideImplementation() 修改指定 class 的某個帶返回值、帶一個參數的方法實現
  • extend_void_nonA - 用 QMUI 的 ExtendImplementationOfVoidMethodWithoutArguments() 修改指定 class 的某個無返回值、無參數的方法實現
  • extend_void_argv - 用 QMUI 的 ExtendImplementationOfVoidMethodWithSingleArgument() 修改指定 class 的某個無返回值、帶一個參數的方法實現
  • extend_return_nonArgv - 用 QMUI 的 ExtendImplementationOfNonVoidMethodWithoutArguments() 修改指定 class 的某個帶返回值、無參數的方法實現
  • extend_return_argv - 用 QMUI 的 ExtendImplementationOfNonVoidMethodWithSingleArgument() 修改指定 class 的某個帶返回值、帶一個參數的方法實現

Block

  • blockArguments - 聲明一個用於方法參數的 block
  • blockproperty - 聲明一個用於 property 的 block
  • blocktypedef - 用 typedef 定義一個 block
  • blockvar - 定義一個作爲局部變量的 block

Method & Function

  • fnv - 定義一個返回值爲 void 的方法
  • fnv: - 定義一個返回值爲 void 且帶參數的方法
  • fnblock - 定義一個返回值類型爲 block 的方法
  • fnv_handleEvent - 定義一個用於 UIControl 事件回調的方法
  • fnv_longPress - 定義一個用於 UILongPressGestureRecognizer 的回調方法(你就不用每次都去拼寫那個很長的手勢名字了)
  • fnv_pan - 定義一個用於 UIPanGestureRecognizer 的回調方法
  • fnv_tap - 定義一個用於 UITapGestureRecognizer 的回調方法

UIView

  • setFrame - 爲 UIView 設置 frame
  • setFrame_QMUI - QMUI 使用像素對齊的 CGRectFlatMake() 爲 UIView 設置 frame
  • setFrameX - QMUI 使用 CGRectSetX() 修改 UIView 的 frame.origin.x
  • setFrameY - QMUI 使用 CGRectSetY() 修改 UIView 的 frame.origin.y
  • setFrameXY - QMUI 使用 CGRectSetXY() 修改 UIView 的 frame.origin
  • sizeThatFits - 爲當前 view 創建 sizeThatFits: 方法
  • layoutSubviews - 展開 layoutSubviews 方法
  • updateConstraints - 展開 updateConstraints 方法
  • getWidth - 展開 CGRectGetWidth()
  • getHeight - 展開 CGRectGetHeight()
  • getMinX - 展開 CGRectGetMinX()
  • getMinY - 展開 CGRectGetMinY()
  • addtarget - 調用 UIControl addTarget:action:forEvents: 方法
  • setImageForButton - 爲 UIButton 設置圖片
  • setTitleColorForButton - 爲 UIButton 設置文字顏色
  • setTitleForButton - 爲 UIButton 設置文字

UITableView

  • initWithStyle - 展開 initWithStyle: 方法
  • initWithStyleForCell - 展開 UITableViewCell initWithStyle:reuseIdentifier: 方法
  • tableViewDelegate - 展開常用的幾個 UITableViewDelegate 方法
  • numberOfSectionsInTableView - 展開 numberOfSectionsInTableView:方法
  • numberOfRowsInSection - 展開 tableView:numberOfRowsInSection: 方法
  • cellForRowAtIndexPath - 展開 tableView:cellForRowAtIndexPath: 方法
  • heightForRowAtIndexPath - 展開 tableView:heightForRowAtIndexPath: 方法
  • didSelectRowAtIndexPath - 展開 tableView:didSelectRowAtIndexPath: 方法

UICollectionView

  • collectionViewDelegate - 展開常用的幾個UICollectionViewDelegate 方法
  • numberOfSectionsInCollectionView - 展開 numberOfSectionsInCollectionView:
  • numberOfItemsInSection - 展開 collectionView:numberOfItemsInSection:
  • cellForItemAtIndexPath - 展開 collectionView:cellForItemAtIndexPath:
  • sizeForItemAtIndexPath - 展開 collectionView:layout:sizeForItemAtIndexPath: 方法
  • didSelectItemAtIndexPath - 展開 collectionView:didSelectItemAtIndexPath: 方法
  • didDeselectItemAtIndexPath - 展開 collectionView:didDeselectItemAtIndexPath: 方法

UIViewController

  • initWithNib - 展開 initWithNibName:bundle: 方法
  • didInitialize - 展開某些 QMUI 控件提供的 didInitialize 方法
  • didInitializeWithStyle - 展開 QMUICommonTableViewController 的 didInitializeWithStyle: 方法
  • loadView - 展開 loadView 方法
  • viewDidLoad - 展開 viewDidLoad 方法
  • viewWillAppear - 展開 viewWillAppear: 方法
  • viewDidAppear - 展開 viewDidAppear: 方法
  • viewWillDisappear - 展開 viewWillDisappear: 方法
  • viewDidDisappear - 展開 viewDidDisappear: 方法
  • viewDidLayoutSubviews - 展開 viewDidLayoutSubviews: 方法
  • updateViewConstraints - 展開 updateViewConstraints: 方法
  • addChildViewController - 在當前 UIViewController 裏添加 childViewController
  • removeFromParentViewController - 將 childViewController 從當前的 UIViewController 裏移除
  • initSubviews - QMUI 展開 initSubviews 方法
  • setupNavigationItems - QMUI 重寫 QMUICommonViewController 裏的 setupNavigationItems 方法
  • setupToolbarItems - QMUI 重寫 QMUICommonViewController 裏的 setupToolbarItems 方法

UIBarButtonItem

  • backItem - 用 QMUI 方法生成一個返回按鈕
  • boldTitleItem - 用 QMUI 方法生成一個文字加粗的導航欄按鈕
  • closeItem - 用 QMUI 方法生成一個導航欄上的關閉圖標按鈕
  • imageItem - 用 QMUI 方法生成一個導航欄上的圖片按鈕
  • titleItem - 用 QMUI 方法生成一個導航欄上的文字按鈕

Other

  • pragma - 展開一個用於 Xcode 導航的 #pragma mark - 宏
  • if11 - 展開一個 @available(iOS 11, *) 的 if 判斷
  • externRefInH - 在 *.h 文件裏聲明一個 extern const 的指針
  • externRefInM - 在 *.m 文件裏爲一個 extern const 的指針賦值
  • externValueInH - 在 *.h 文件裏聲明一個 extern const 的值變量
  • externValueInM - 在 *.m 文件裏爲一個 extern const 的變量賦值
  • static reference - 定義一個 static 的指針
  • static - 定義一個 static 的值變量
  • __weakSelf - 定義一個 weak 的 self 指針
  • __strongSelf - 將 weakSelf 指針改爲 strong 的 self 指針
  • logCallStackSymbols - 用 NSLog 打出當前的方法調用棧信息
  • timeConsuming - 展開一段用 CACurrentMediaTime() 來計算方法耗時的代碼

https://github.com/QMUI/QMUI_iOS_CodeSnippets

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章