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

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

以下是个人长期习惯使用的代码片段,是承受了个人的代码习惯的多次演变的而总结出来的。

正所谓飘飘树叶千千万,也找不出两片是一样的,但是可以找到我们认为最美的那片叶子。同样,每个人的编码风格都会有所不懂,都希望找出自己所认为的简单明了的最方便的编码风格。

没有长期固定的样式,只有在不断的优化中寻找真我。

下面就是代码片段的截图样式,标题的前后两个分别标注:title(标题)、Completion Shortcut(快捷方式)

2019100515381141.png


一、常用代码片段

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

见下图:

20200604233636702.png


如果没有CodeSnippets文件,那就说你没有自定义过自己的代码片段,也就不需要迁移代码的操作了。

如果有CodeSnippets文件,你可以直接拷贝这个文件夹,放到工作电脑的的相同位置。


2、远程仓库管理

这里只能提供个思路。可以将代码片段的提交至git仓库托管和脚本(后年说明),类似如下图:

20200604232239717.png


在另一台电脑需要这些代码片段时,只需要将该文件下载下来,然后打开终端,跳转到该文件并执行脚本即可。

这种方式简单实用,甚至可以将它直接放到多人开发的项目中管理,实现代码片段的共享。

因为个人暂时不太懂脚本语言,不知道怎么实现。有哪个大神会的,还望能在评论该文的评论中上传哈?🤝 🤝

要么只能待以后有机会了解到这一块了,再更新脚本信息。


待更新~~


相关文章
|
存储 数据库 iOS开发
ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(二)
由于大家都热衷于对ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(一)的浏览下面我分享下我的源文件git仓库:     用法(这边我是对缓存的一些操作不需要可以省去):https://github.
|
网络协议 API iOS开发
快速零配置迁移 API 适配 iOS 对 IPv6 以及 HTTPS 的要求
本文快速分享一下快速零配置迁移 API 适配 iOS 对 IPv6 以及 HTTPS 的要求的方法,供大家参考。原文发表于我的技术博客 零配置方案 最新的苹果审核政策对 API 的 IPv6 以及 HTTPS 都作了要求,那么如何快速进行适配呢? 这里就快速给大家分享一个站点:https://www.cloudflare.com/ 注意它其中有两个重要的功能,进行配置,迁移 DNS 即可,详细的使用请自行查阅文档或者直接在小密圈给我提问即可。
1034 0
|
存储 缓存 数据库
ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(-)
demo 地址 https://github.com/PureLovePeter/DataCache 好用的话 star star star 数据库版本迁移顾名思义就是在原有的数据库中更新数据库,数据库中的数据保持不变对表的增、删、该、查。
1006 0
|
iOS开发
微信ios版6.2更新 聊天记录迁移更快捷朋友圈可翻译
  微信iPhone版昨日发布更新,版本号为微信 6.2 for iOS,主要特性有聊天记录迁移、发送图片更快捷、支持朋友圈翻译、手机充值可充流量查余额、可以通过展示二维码来收钱,和ytkah一起来瞧瞧吧   聊天记录可以快速导入到新手机,不用担心换手机后聊天记录的遗失。
964 0
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
109 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
4天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
19 9
|
4天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
2天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。