【iOS】代码片段汇总与迁移管理


以下是个人长期习惯使用的代码片段,是承受了个人的代码习惯的多次演变的而总结出来的。
正所谓飘飘树叶千千万,也找不出两片是一样的,但是可以找到我们认为最美的那片叶子。同样,每个人的编码风格都会有所不懂,都希望找出自己所认为的简单明了的最方便的编码风格。
没有长期固定的样式,只有在不断的优化中寻找真我。

下面就是代码片段的截图样式,标题的前后两个分别标注: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仓库托管和脚本(后年说明),类似如下图:

在这里插入图片描述
在另一台电脑需要这些代码片段时,只需要将该文件下载下来,然后打开终端,跳转到该文件并执行脚本即可。
这种方式简单实用,甚至可以将它直接放到多人开发的项目中管理,实现代码片段的共享。
因为个人暂时不太懂脚本语言,不知道怎么实现。有哪个大神会的,还望能在评论该文的评论中上传哈?🤝 🤝
要么只能待以后有机会了解到这一块了,再更新脚本信息。

待更新~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜子三百克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值