美文网首页
初学block(一)

初学block(一)

作者: 贼海鸥 | 来源:发表于2017-05-17 16:54 被阅读0次

block语法:
返回值类型 (^block名称)(参数名1 参数,参数名2 参数, ...) = ^(参数名1 参数,参数名2 参数, ...) {
需要进行的操作,比如返回值什么的.
};
调用
block名称(参数名1 参数,参数名2 参数, ...);

我看这些语法的时候,很头疼,还是直接上代码吧.
根据返回值和参数,可以分为

  • 有参数,有返回值的
int (^myBlock2)(int a , int b) = ^(int a , int b){
     return a + b;
};
int sum = myBlock2(3 , 4);
  • 有参数没有返回值
void (^myBlock4)(int a) = ^(int a){
      NSLog(@"is block");
};
myBlock4(3);
  • 没有参数没有返回值
 void (^ myBlock)() = ^(){
      NSLog(@"is block");
  };
myBlock();
  • 没有参数有返回值
int (^myBlock5)() = ^(){
       int a = 5;
       return a;
};
myBlock5();

基本就分为这几种.还有一种写法是,用typedef声明block的.

//   有参数,有返回值
typedef int (^SumBlock)(int a , int b);

调用的时候

SumBlock myBlock3 = ^(int a , int b) {
     return a + b;
};
NSLog(@"%d" , myBlock3(2 , 1));

这些都是最简单的block用法.

下面说一个block的简单用法.block传值
首先有两个类,Person,Dog

  • 1.在Dog的.h方法里面声明block
// 定义一个block变量
@property (nonatomic , copy) void(^BarkCallBack)(Dog *dog , int count);
  • 2.初始化Dog的时候,让Dog每隔1s叫一下
-(instancetype)init
{
    self = [super init];
    if (self) {
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(upDateTimer:) userInfo:nil repeats:YES];
    }
    return self;
}
  • 3.然后在叫的事件里面给Person传递叫的次数
-(void)upDateTimer:(id)arg {
    self.barkCount++;
    // 给Person汇报一下,调用Block
    self.BarkCallBack(self , self.barkCount);
}
  • 4.在Person类中声明Dog类
@property (nonatomic , strong) Dog *dog;
  • 5.实现Dog的set方法
-(void)setDog:(Dog *)dog {
    _dog = dog;
    [dog setBarkCallBack:^(Dog *dog, int count) {
        NSLog(@"dog交了%d声" , count);
    }];
}
  • 在控制器里面实现
Person *p = [[Person alloc] init];
Dog *dog = [[Dog alloc] init];
[p setDog:dog];

相关文章

  • 初学block(一)

    block语法:返回值类型 (^block名称)(参数名1 参数,参数名2 参数, ...) = ^(参数名1 参...

  • 初学Block

    一、简单Block的声明和实现 - (void)viewDidLoad { [super viewDidloa...

  • 初学block(二)

    我已经讲过了怎么声明block了.比如用typedef 调用 下面开始讲一些其他的用法 1.block作为参数使用...

  • Day.03.11 Block关于TextField的互相传值应

    Block的基本运用, 适用于初学ViewController.m secondViewController.h...

  • iOS11最新 - 零基础上手block

    一.初识block 这就是一个最简单的block,为了方便初学者记忆理解,我们再来用熟悉的方法/函数来对比理解:如...

  • ios学记0003-Block与类通信问题

    前言 在Block初学的基础上,更深一步的学习Block用于class之间的通信问题.要知道,在较小的工程中,程序...

  • ios拓展6-block的作为参数

    block对于初学者,会觉得block比较复杂,很难理解. 尤其是在作为参数的时候. 一般在实际使用的时候我们常...

  • iOS Block

    ​ 前言:Block在iOS开发中举足轻重,但对于初学者来说又比较抽象,使用注意点也比较多。本文先介绍Block...

  • 初学block(三)--怎么在项目用block

    我感觉我自己的学习能力不是很好,一直以来,关于别人的博客,写的文章看的也不少了,但是,对于block还是一知半解的...

  • iOS block 教程

    Block是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不...

网友评论

      本文标题:初学block(一)

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