初学block(一)

2017-05-17  本文已影响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

// 定义一个block变量
@property (nonatomic , copy) void(^BarkCallBack)(Dog *dog , int count);
-(instancetype)init
{
    self = [super init];
    if (self) {
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(upDateTimer:) userInfo:nil repeats:YES];
    }
    return self;
}
-(void)upDateTimer:(id)arg {
    self.barkCount++;
    // 给Person汇报一下,调用Block
    self.BarkCallBack(self , self.barkCount);
}
@property (nonatomic , strong) Dog *dog;
-(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];
上一篇 下一篇

猜你喜欢

热点阅读