• 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-04-18
  • 生活-热门标签-华商生活 2019-04-18
  • 文化山西:风华长城岁月歌 2019-04-16
  • 中华龙舟大赛福州站收官 黑马异军突起摘大满贯 2019-04-16
  • 台湾布袋戏大师陈锡煌的两岸缘 2019-04-13
  • 老师:讲课再累都不怕 就怕各级搞检查讲课再累都不怕-教育时讯 2019-04-13
  • 行业变革中的房产经纪公司加盟暗战 ——凤凰网房产深圳 2019-03-31
  • 图解:习近平出席博鳌亚洲论坛2018年年会前瞻 2019-03-19
  • 外贸创新举措 让开放惠及世界 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-14
  • 我的中国医改建议,彻底解决看病难看病贵 2019-03-14
  • 海空联合演练相关新闻 2019-01-05
  • 登录 立即注册
    金钱:

    广州快乐十分开奖记录

    快乐十分任四复式:ios 链式编程初涉及基本语法 [复制链接]

    2019-2-18 10:40
    Torr 阅读:489 评论:0 赞:0
    Tag:  

    简介

    广州快乐十分开奖记录 www.2hyn.net 相信大部分ios开发人员都使用过Masonry(强大约束封装框架),对它的make.left.equalTo()或者make.left.equalTo().and.right.equalTo()应该有很深刻的印象吧,这种编程方式就叫链式编程。从它的语法可以看出它的任务方法是一步步的“点”出来,然后执行,可读性和操作性都很高,那么这是怎么实现的?

    分析与实现

    先来看看它的“点”语法:在ios中,“点”语法很常见,比如我要创建一个label,并设置一些属性:

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 300, 60, 30)];
    label.text = @"";
    label.font = [UIFont systemFontOfSize:16];
    label.textColor = [UIColor redColor];
    [self.view addSubview:label];

    创建好后,感觉每次都要用label对象“点”属性出来设置,有点麻烦。那可不可以像Masonry那样,一个对象,直接“点”一连窜任务出来实现,是不是就要方便一些。比如像下面这样:

    label.text(@"喔喔喔").textFont([UIFont fontOfSize:16]).textColor([UIColor redColor]);

    有Masonry在前,不用想太多,那肯定是可以实现的,现在就来看看如何一步步实现吧。
    都知道,对象“点”属性(如:label.text),既然对象才能调出属性,那我们在设置text的方法中携带一个该对象,是不是就能继续往下调用。现在我重新声明一个text方法,让其携带一个label对象(实现文件为UILabel的类别文件):

    - (UILabel *(^)(NSString *text))cp_text;

    加个前缀cp是为了区分系统的text方法

    该方法的返回值是一个block,block内又返回了一个UILabel对象,^表示这是一个代码块,NSString *text这是传入的参数。再来看看实现:

    - (UILabel *(^)(NSString *text))cp_text
    {    return ^(NSString *text)
        {        self.text = text;        return self;
        };
    }

    整体返回了一个block,block内部执行的逻辑就是对label.text的赋值和返回该对象,返回对象就是用于连续调用其他类似的方法。按照这种思路,再来实现UILabel的其他几个方法:

    - (UILabel *(^)(UIColor *color))cp_textColor
    {    return ^(UIColor *color)
        {        self.textColor = color;        return self;
        };
    }
    
    - (UILabel *(^)(UIFont *font))cp_textFont
    {    return ^(UIFont *font)
        {        self.font = font;        return self;
        };
    }

    现在来看看连续调用:

    UILabel *label = UILabel.cp_init.cp_frame(100,300,60,30);
    label.cp_text(@"喔喔喔").cp_textFont(SFONT(16)).cp_textColor(RedColor);self.view.cp_addSubView(label);

    为了语法统一,我对其初始化方法也封装了一次,使其整体看起来比较连贯,流畅。

    总结

    链式编程在ios oc中使用频率并不高,不过在其环环相扣的语法上来看,某些时候调用起来确实很方便。我写了个demo,封装了UIView,UILabel,UIButton的一些属性和方法,感兴趣的可以去我的项目地址下载下来看看。
    git项目地址:https://github.com/chenfengxiaoxixi/TextSpecLib

    分享到:
    我来说两句
    facelist
    您需要登录后才可以评论 登录 | 立即注册
    所有评论(0)
    关闭

    每日头条

    通过邮件订阅最新 Code4App 信息
    上一条 /4 下一条
    联系我们
    关闭
    合作电话:
    13802416937
    Email:
    [email protected]
    商务市场合作/投稿
    问题反馈及帮助
    联系我们

    广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|广州快乐十分开奖记录 ( 广州快乐十分开奖记录 )

    返回顶部
  • 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-04-18
  • 生活-热门标签-华商生活 2019-04-18
  • 文化山西:风华长城岁月歌 2019-04-16
  • 中华龙舟大赛福州站收官 黑马异军突起摘大满贯 2019-04-16
  • 台湾布袋戏大师陈锡煌的两岸缘 2019-04-13
  • 老师:讲课再累都不怕 就怕各级搞检查讲课再累都不怕-教育时讯 2019-04-13
  • 行业变革中的房产经纪公司加盟暗战 ——凤凰网房产深圳 2019-03-31
  • 图解:习近平出席博鳌亚洲论坛2018年年会前瞻 2019-03-19
  • 外贸创新举措 让开放惠及世界 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-14
  • 我的中国医改建议,彻底解决看病难看病贵 2019-03-14
  • 海空联合演练相关新闻 2019-01-05
  • 北京pk10庄家作弊视频 全天北京赛车pk10规则 内蒙古时时彩规则介绍 黑金团队快乐8官方网址 北京快乐8现在开奖结果 北京赛车pk10稳赢公 湖南幸运赛车推荐 okooo澳客网pk10 湖南彩票定制开发报价 湖南彩票大奖排行 盛兴彩票网 京东彩票代购性质 上海基诺彩票开奖结果 现金赌博 双色球规则 决胜21點吃鸡