注册

入手环信,代码块知识点用的多,发帖回顾下


#import

int c = 0;

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //block声明格式:返回值类型 (^blaock名字) (形参列表)
        int (^myFun)();
       
        //block实现: block 名字 = ^(形参列表){};
        myFun =  ^(){
            NSLog(@"这是一个代码块");
            return 1;
        };
       
        //调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
        int a = myFun();//空括号不能少!!
       
        NSLog(@"%d",a);
       
        //有返回值,有形参,声明和实现放一起
        int (^myBlock)(int a, int b) = ^(int a, int b){
            return 1+b;
        };
        //调用
        int sum = myBlock(10,20);
        NSLog(@"%d",sum);
       
        //返回值类型是字符串 NSString *(^名字)(形参列表)
       
        NSString *(^myBlock1) (NSString *s) = ^(NSString *s){
            NSLog(@"字符串:%@",s);
            return s;
        };
        myBlock1(@"123");
       
        //有一个局部变量,要在block进行值的改变
       
        __block int b = 0;
       
        void (^myBlock2)() = ^(){
            b++;
        };
       
        //有一个全局变量,在block进行值的改变
       
        void (^myBlock3)() = ^(){
            c++;
        };
    }
    return 0;
}

block 作为函数参数
block作为形参使用,在函数中使用block方法运算数据
#import
//block作为函数的参数
//函数返回值类型  函数名(block的声明格式)
void fun(int (^bsasa)(int a,int b)){
    int sum = bsasa(3,2);
    NSLog(@"%d",sum);
}

void fun1(NSString *(^myBlock)(NSString *s),NSString *s1){
    NSLog(@"---%@",myBlock(s1));
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        //当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
        int (^myBlock) (int c, int d) = ^(int a, int b){
            NSLog(@"--%d,%d",a,b);
            return a-b;
        };
       
        //函数形参是block,调用时,直接传block的名字就行
        fun(myBlock);
       
        //调用的另一种方式:内联
        //内联block格式:^返回值类型 (形参列表){}
        fun(^int(int a, int b) {
           
            return a*b;
        });
       
       
        fun1(^NSString *(NSString *s) {
            return s;
        }, @"123");
       
    }
    return 0;
}
block作为方法的参数

Person.h
#import

//使用typedef声明block:typedef 返回值类型 (^名字)(形参列表)
typedef int  (^myblockType)(int a);

@interface Person : NSObject

//block作为方法的参数:(返回值类型 (^)(形参列表))参数名(blcok名字)
-(void)myblock:(int (^)(int a))block;

-(void)sengStr:(NSString *)name andblock:(NSString *(^)(NSString *))myblock1;

-(void)useblockType:(myblockType)sss;

-(void)myname:(NSString *)name;

@end
Person.m
#import "Person.h"

@implementation Person

-(void)myblock:(int (^)(int))block{
   
    int a = block(10);
    NSLog(@"%d",a);
}

-(void)sengStr:(NSString *)name andblock:(NSString *(^)(NSString *))myblock1{
    myblock1(name);
}

-(void)useblockType:(myblockType)sss{
    int res = sss(10);
    NSLog(@"---%d",res);
}

-(void)myname:(NSString *)name{
   
    NSString *str = [name stringByAppendingString:@"+-"];
    NSLog(@"%@",str);
}

@end
main.m
#import

#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
   
        Person *p = [[Person alloc] init];

        [p sengStr:@"这儿" andblock:^NSString *(NSString *s) {
            NSLog(@"我在:%@",s);
            return s;
        }];//内联形式直接实现block、
       
        [p useblockType:^int(int a) {//typedef 声明
            return a;
        }];  
       
        //传入一个名字,然后进行拼接,名字--;
       
        [p myname:@"aa"];//
       
        [p sengStr:@"aa" andblock:^NSString *(NSString *s) {//
            return [s stringByAppendingString:@"--"];
        }];
       
    }
    return 0;
}
 

2 个评论

en

要回复文章请先登录注册