IOS_编程思想_Block

开启苹果自带的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 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,376评论 2 26
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 看见更多的不一样,然后去理解更多的不一样 当你能看见有能理解的时候 一个孩子的内心,他的弹性就变大了,他的心也变宽...
    郁郁寡欢的牛阅读 104评论 0 0
  • 如何培养认知选择正确的刚需 ❤前面讲到刚需决定做驱动力 也就是说一个人每天必须做的事情决定了他自己推动自己,不需要...
    孤独中的喧嚣阅读 271评论 0 0
  • 拥有时,没觉得什么,总是等到失去后才懂得珍惜。时光飞逝,如指间沙,转眼间,我已经考入了大学。行走在这个陌生的城市,...
    浅雨悠扬阅读 229评论 0 0