美文网首页
IOS_编程思想_Block

IOS_编程思想_Block

作者: _CLAY_ | 来源:发表于2017-10-30 11:09 被阅读9次

    开启苹果自带的block代码块:

    输入inlineBlock开启苹果自带的block代码块

    <#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
            <#statements#>
        };
    

    举个例子

    void(^BC_Block)() = ^() {
         NSLog(@"我是一个block");
         };
         BC_Block();
    

    当返回值为id类型的时候,所定义的值也必须将类型写上,否则会报错如下所示!


    image.png

    正确的写法:

    image.png

    由此可见,苹果自带的block代码块并不是完整的!

    将完整的Block添加到代码块:

    <#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^<<#returnType#>>(<#parameters#>) {
            <#statements#>
        };
    

    Xcode 9.0.1 鼠标左键长按1秒,拖拽到右侧的代码块列表中
    Xcode 9.0.1 以前的可以直接拖拽到右侧的代码块列表中

    Block开发中的使用场景:

    准备工作:

    先定义一个Person类
    Person.h

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property (nonatomic,copy) void(^run)(void);
    
    -(void)eat:(void(^)(void))block;
    
    -(Person *(^)(int))write;
    
    @end
    

    Person.m

    #import "Person.h"
    
    @implementation Person
    
    -(void)eat:(void (^)(void))block {
        NSLog(@"Person里面调用Block");
        block();
    }
    -(Person *(^)(int x))write {
    //    self是方法调用者!!
        return  ^Person *(int x) {
            NSLog(@"我写到%d页",x);
            return self;
        };
    }
    
    @end
    

    ViewController.m

    @interface ViewController ()
    @property (nonatomic,strong) Person *p;
    @end
    

    1.Block作为属性.在合适的时候调用方法

     Person *p = [[Person alloc] init];
        p.run = ^{
            NSLog(@"执行对象中的Block");
        };
        _p = p;
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        _p.run();
    }
    

    2.Block作为参数.外界不调用,留给内部调用

    [p eat:^{
            NSLog(@"吃东西");
        }];
    

    3.Block作为返回值

    void(^block)(void) = p.write;
    block(1000);
    

    等同于

    p.write(1000);
    

    优点:1.可读性强
    2.扩展性 ---- 链式编程

    p.write(100).write(200).write(300);
    

    相关文章

      网友评论

          本文标题:IOS_编程思想_Block

          本文链接:https://www.haomeiwen.com/subject/plukpxtx.html