zoukankan      html  css  js  c++  java
  • AJ学IOS 之BLOCK的妙用_利用block实现链式编程

    AJ分享,必须精品

    一:场景

    我们有个对象人,他有两个方法,一个是学习study,一个是跑步run,
    这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下:
    调用:

    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
        //初始化人
            Person *p = [[Person alloc] init];
            //调用
            [[p study] run];
        return 0;
    }

    人对象:

    
    // Person.h
    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    - (Person *)study;
    - (Person *)run;
    @end
    
    // Person.m
    #import "Person.h"
    
    @implementation Person
    - (Person *)study
    {
        NSLog(@"study----");
    
        return self;
    }
    
    - (Person *)run
    {
        NSLog(@"run----");
        return self;
    }
    
    @end

    运行结果
    这里写图片描述

    二:block链式结构实现

    调用:

    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            Person *p = [[Person alloc] init];
    
            p.study(@"xx宝典").run().study(@"xx剪发");
        }
        return 0;
    }

    人对象:

    //Person.h
    @interface Person : NSObject
    
    
    - (Person *(^)(NSString *name))study;
    - (Person *(^)())run;
    @end
    //Person.m
    @implementation Person
    
    - (Person *(^)(NSString *))study
    {
        return ^(NSString *name){
            NSLog(@"study----%@", name);
            return self;
        };
    }
    
    - (Person *(^)())run
    {
        return ^{
            NSLog(@"run----");
            return self;
        };
    }
    @end
    

    在这里面,我们

    p.study(@”xx宝典”).run().study(@”xx剪发”);
    调用study方法:p.study
    执行block:p.study(@”xx宝典”)
    结合person内部写的方法

    - (Person *(^)(NSString *))study
    {
        return ^(NSString *name){
            NSLog(@"study----%@", name);
            return self;
        };
    }

    明显可以看到,当执行p.study(@”xx宝典”)时候,内部是return一个返回值是person*类型(最后的return self)的block 这也就解释了为什么下一句可以继续连着用点来调用了。也就是说返回的是一段block,这段block里面又有返回值,返回值是person的对象self。
    这里的参数有点晕,记住就好,用链式结构的block的巧妙用法,简单了解就好

    执行结果

    这里写图片描述

  • 相关阅读:
    Deepin v20 beta更新后没有无线网卡
    Java操作Poi--word图表中颜色的设置
    IDEA配置之CopyRight
    Oracle——日期函数,时间操作(汇总)
    IDEA插件之alibaba编程规范
    IDEA插件之PMD
    IDEA插件之CheckStyle
    IDEA插件之FindBugs
    小计--------flume 自定义kafka source 案例
    记一次--------phoenix创建表映射到hbase报错
  • 原文地址:https://www.cnblogs.com/luolianxi/p/4990283.html
Copyright © 2011-2022 走看看