qmui-ios-codesnippets 是一个 QMUI 团队日常工作中整理出来的用于 Xcode 的 iOS 通用代码片段集,其中也包含若干专用于 QMUI for iOS 框架的代码片段。
整理这个代码片段集的初衷有以下几点:
- 我们发现由于 Xcode 本身的功能不足,导致我们经常在重写一些系统父类方法时容易忘了调用
super,从而出现一些很难排查的诡异bug。 - Xcode 虽然有模糊匹配的代码提醒,但代码提醒只能帮你写方法名,而code snippets 还可以帮你填充一些默认的方法实现,或者直接移动光标到方法体内,省去几次光标操作。
- 一些常用的写法本身语法可能比较复杂,难以记忆,例如实现一个类的单例、使用
swizzle来重写系统控件的方法、block 在不同地方的语法不同等。 - 一些代码本身看似简单,但由于特别常用,所以使用 code snippets 可以大大节省时间。
使用方式
Xcode 的 Code Snippets 文件存放于 ~/Library/Developer/Xcode/UserData/CodeSnippets 目录,只要直接把 *.codesnippets 文件放到这个目录下(若没有则自己创建),重启 Xcode 即可生效。
为了方便更新,建议直接将 QMUI iOS CodeSnippets clone 到这个目录内(注意,不是在 CodeSnippets 里创建一个 QMUI 的目录,这里不支持子目录):
cd ~/Library/Developer/Xcode/UserData/CodeSnippets
git clone https://github.com/QMUI/QMUI_iOS_CodeSnippets.git ./
其中以 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 -
load_once- 创建一个带dispatch_once的+load方法 -
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_non_argv- 用 QMUI 的OverrideImplementation()重写指定 class 的某个无返回值、无参数的方法实现 -
override_void_single_argv- 用 QMUI 的OverrideImplementation()修改指定 class 的某个无返回值、带一个参数的方法实现 -
override_void_two_argvs- 用 QMUI 的OverrideImplementation()修改指定 class 的某个无返回值、带两个参数的方法实现 -
override_return_non_argv- 用 QMUI 的OverrideImplementation()修改指定 class 的某个带返回值、无参数的方法实现 -
override_return_single_argv- 用 QMUI 的OverrideImplementation()修改指定 class 的某个带返回值、带一个参数的方法实现 -
override_return_two_argvs- 用 QMUI 的OverrideImplementation()修改指定 class 的某个带返回值、带两个参数的方法实现 -
extend_void_non_argv- 用 QMUI 的ExtendImplementationOfVoidMethodWithoutArguments()修改指定 class 的某个无返回值、无参数的方法实现 -
extend_void_single_argv- 用 QMUI 的ExtendImplementationOfVoidMethodWithSingleArgument()修改指定 class 的某个无返回值、带一个参数的方法实现 -
extend_void_two_argvs- 用 QMUI 的ExtendImplementationOfVoidMethodWithTwoArguments()修改指定 class 的某个无返回值、带两个参数的方法实现 -
extend_return_non_argv- 用 QMUI 的ExtendImplementationOfNonVoidMethodWithoutArguments()修改指定 class 的某个带返回值、无参数的方法实现 -
extend_return_single_argv- 用 QMUI 的ExtendImplementationOfNonVoidMethodWithSingleArgument()修改指定 class 的某个带返回值、带一个参数的方法实现 -
extend_return_two_argvs- 用 QMUI 的ExtendImplementationOfNonVoidMethodWithTwoArguments()修改指定 class 的某个带返回值、带两个参数的方法实现
Block
-
blockParameterInMethod- 声明一个用于 OC 方法参数的 block -
blockParameterInFunction- 声明一个用于 C 函数参数的 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 -宏 -
osif- 展开一个 @available(iOS xxx, *) 的 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()来计算方法耗时的代码











网友评论