以下是个人长期习惯使用的代码片段,是承受了个人的代码习惯的多次演变的而总结出来的。
正所谓飘飘树叶千千万,也找不出两片是一样的,但是可以找到我们认为最美的那片叶子。同样,每个人的编码风格都会有所不懂,都希望找出自己所认为的简单明了的最方便的编码风格。
没有长期固定的样式,只有在不断的优化中寻找真我。
下面就是代码片段的截图样式,标题的前后两个分别标注:title(标题)、Completion Shortcut(快捷方式)
一、常用代码片段
1、assign - @assign
///<#description#> @property (nonatomic, assign) <#class#> <#name#>;
2、copy - @copy
///<#description#> @property (nonatomic, copy) <#class#> *<#name#>;
3、strong - @strong
///<#description#> @property (nonatomic, strong) <#class#> *<#name#>;
4、intererface - @interface
@interface <#class#> () @end
5、lazyLoad - @lazyLoad
-(<#class#> *) <#name#> { if (!_<#name#>) { _<#name#> = [<#class#> new]; } return _<#name#>; }
6、initView - @initView
#pragma mark - 赋值 #pragma mark - Methods #pragma mark - Intial - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder: aDecoder]) { [self setUpBaseData]; [self setUpUI]; } return self; } - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self setUpBaseData]; [self setUpUI]; } return self; } ///基本数据配置 - (void)setUpBaseData { } ///控件添加 - (void)setUpUI { } #pragma mark - lazyLoad - (void)dealloc { }
7、initTVCell - @initTVCell
@interface <#class#> () @end @implementation <#class#> #pragma mark - 赋值 #pragma mark - Methods #pragma mark - Intial - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [self setUpBaseData]; [self setUpUI]; } return self; } ///基本数据设置 - (void)setUpBaseData { } ///添加控件 - (void)setUpUI { } #pragma mark - 布局 - (void)layoutSubviews { [super layoutSubviews]; } #pragma mark - lazyLoad @end
8、initTableView - @initTableView
//Views #import "ZM_YYLabel_TVCell.h" // model #import "<#modelClass#>.h" @interface <#class#> ()<UITableViewDelegate,UITableViewDataSource> ///表格 @property(nonatomic,strong)UITableView *tableView; @property (nonatomic,strong) <#ClassName#> *model; @end @implementation <#class#> #pragma mark - #pragma mark - Initial -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.title = @"<#titleName#>"; } - (void)viewDidLoad { [super viewDidLoad]; } -(void)firstUpdateView{ self.view.backgroundColor = BACKCOLOR; [self tableView]; [self registTVCell]; } -(void)registTVCell{ [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])]; [_tableView registerNib:[UINib nibWithNibName:NSStringFromClass([<#class#> class]) bundle:nil] forCellReuseIdentifier:NSStringFromClass([<#class#> class])]; } -(void)firstLoadData{ } #pragma mark - #pragma mark - Request -(void)sendAfNetwork{ self.model = [<#ModelClass#> shareDicModel:@{}]; self.dataMarr = [self.model <#method#>]; [self.tableView reloadData]; } #pragma mark - #pragma mark - Methods /**点击单元格响应方法*/ -(void)tableViewCellClickAction:(NSIndexPath *)indexPath{ } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - #pragma mark - tabViewDelegate -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *pubCell = [UITableViewCell new]; <#ModelClass#> *model = <#Array#>[indexPath.row]; if ([model.bsReuseId isEqualToString:NSStringFromClass([<#class#> class])]) { <#class#> *cell=[tableView dequeueReusableCellWithIdentifier:NSStringFromClass([<#class#> class]) forIndexPath:indexPath]; pubCell = cell; } if (pubCell) { pubCell.selectionStyle = UITableViewCellSelectionStyleNone; } return pubCell; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return <#section#>; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return <#row#>; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ <#ModelClass#> *model = <#Array#>[indexPath.row]; return model.bsHeight; } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 0.0001; } -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0.0001; } //组头 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ @autoreleasepool { UIView *vv=[[UIView alloc]init]; vv.backgroundColor=[UIColor clearColor]; return vv; } } //组尾 -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ @autoreleasepool { UIView *vv=[[UIView alloc]init]; vv.backgroundColor=[UIColor clearColor]; return vv; } } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; [self tableViewCellClickAction:indexPath]; } #pragma mark - lazyload - (UITableView*)tableView{ if (!_tableView){ _tableView = [[UITableView alloc] initWithFrame:kFrame(0,0,kIphone_W,kIphone_H - KNaviBarH) style:UITableViewStylePlain]; _tableView.backgroundColor = [UIColor clearColor]; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.scrollEnabled = YES; _tableView.estimatedRowHeight = 0; _tableView.estimatedSectionHeaderHeight = 0; _tableView.estimatedSectionFooterHeight = 0; if (@available(iOS 11.0, *)) { _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } else { self.automaticallyAdjustsScrollViewInsets = NO; } _tableView.delegate = self; _tableView.dataSource = self; [self.view addSubview:_tableView]; } return _tableView; } -(<#class#> *)model{ if (!_model) { _model = [<#class#> new]; } return _model; } @end
9、initCollectionView - @initCollectionView
//Views #import "<#CVCellClass#>.h" //Models #import "<#ModelClass#>.h" @interface <#Class#> ()<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> @property (strong , nonatomic)UICollectionView *collectionView; @property (nonatomic,strong) <#class#> *model; @end @implementation <#Class#> -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; } -(void)reloadNavBarItem{ } - (void)viewDidLoad { [super viewDidLoad]; } #pragma mark - initial -(void)firstLoadData{ } -(void)firstUpdateView{ [self collectionView]; [self registCollectionCell]; } -(void)registCollectionCell{ //cell [self.collectionView registerClass:[<#cellClass#> class] forCellWithReuseIdentifier:NSStringFromClass([<#cellClass#> class])]; } -(void)sendAfNetwork{ } -(void)dealloc{ } #pragma mark - Requests #pragma mark - methods //点击单元格方法 -(void)collectionViewItemClickAction:(NSIndexPath *)indexPath{ } #pragma mark - <UICollectionViewDelegate> - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *gridcell = [UICollectionViewCell new]; <#class#> *model = self.dataMarr[indexPath.item]; if ([model.bsReuseId isEqualToString:NSStringFromClass([<#class#> class])]) { <#class#> *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([<#class#> class]) forIndexPath:indexPath]; gridcell = cell; } return gridcell; } - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { UICollectionReusableView *reusableView = nil; if (kind == UICollectionElementKindSectionHeader) { UICollectionReusableView *footview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:NSStringFromClass([UICollectionReusableView class]) forIndexPath:indexPath]; reusableView = footview; } if (kind == UICollectionElementKindSectionFooter) { UICollectionReusableView *footview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:NSStringFromClass([UICollectionReusableView class]) forIndexPath:indexPath]; reusableView = footview; } return reusableView; } #pragma mark - <UICollectionViewDataSource> //单元组数 - (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return <#num#>; } //组单元格数量 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return <#num#>; } ///组头的宽高 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { return <#size#>; } ///组尾的宽高 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { return <#size#>; } ///单元格宽高 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGFloat item_wh = <#float#>; return kSize(item_wh, item_wh); } ///单元格边距设置 -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ return UIEdgeInsetsMake(0, 0, 0,0); } /单元格x间的间距 //- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { // return 0; //} /单元格y间的间距 //- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { // return 0; //} ///点击单元格方法 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { [collectionView deselectItemAtIndexPath:indexPath animated:YES]; [self collectionViewItemClickAction:indexPath]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - LazyLoad - (UICollectionView *)collectionView{ if (!_collectionView) { UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new]; _collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout]; _collectionView.backgroundColor = [UIColor clearColor]; _collectionView.delegate = self; _collectionView.dataSource = self; [self.view addSubview:_collectionView]; if (@available(iOS 11.0,*)) { _collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; }else{ self.automaticallyAdjustsScrollViewInsets = NO; } _collectionView.showsVerticalScrollIndicator = NO; _collectionView.frame = kFrame(0,0, kIphone_W, kIphone_H - KNaviBarH - kSystemGestureH); //头部 [_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:NSStringFromClass([UICollectionReusableView class])]; //尾部 [_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:NSStringFromClass([UICollectionReusableView class])]; //cell [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class])]; } return _collectionView; } -(<#class#> *)model{ if (!_model) { _model = [<#class#> new]; } return _model; } @end
至于新版Xcode10的代码片段怎么操作,可以参考这篇博客,这里不作赘述。
二、代码片段迁移
1、直接迁移文件夹
打开终端输入:
open ~/Library/Developer/Xcode/UserData/CodeSnippets
见下图:
如果没有CodeSnippets文件,那就说你没有自定义过自己的代码片段,也就不需要迁移代码的操作了。
如果有CodeSnippets文件,你可以直接拷贝这个文件夹,放到工作电脑的的相同位置。
2、远程仓库管理
这里只能提供个思路。可以将代码片段的提交至git仓库托管和脚本(后年说明),类似如下图:
在另一台电脑需要这些代码片段时,只需要将该文件下载下来,然后打开终端,跳转到该文件并执行脚本即可。
这种方式简单实用,甚至可以将它直接放到多人开发的项目中管理,实现代码片段的共享。
因为个人暂时不太懂脚本语言,不知道怎么实现。有哪个大神会的,还望能在评论该文的评论中上传哈?🤝 🤝
要么只能待以后有机会了解到这一块了,再更新脚本信息。
待更新~~