OC: Block回调的使用demo

Block 的用法

 对于类的继承问题,子类在实现的时候,一般是自下而上,先看看下面的实现没有,没实现就向上找方法去实现。


//
//  main.m

#import <Foundation/Foundation.h>
#import "LoginMangage.h"
#import "NSString+Addition.h"

//2 block的当做方法进行传值
//3 一种Block排序的写法(貌似还是以前的方法哦)
//4  用结构体(-1 0 1) NSComparisonResult 类型接收判断结果
//5 打印出当前时区的时间(不是格林威治时间哦)
//6 练习-打印出当前时区的时间
//7  dateWithTimeIntervalSinceNow:的使用
//8  (来自互联网-究竟是不是毫秒)获取自1970年以来的毫秒数的方法 ??????
//9  两个时间判断是否相等  获取时间间隔
//10  catergroy 对 NSString 类的方法的扩展
int main(int argc, const char * argv[]) {
    
//    @autoreleasepool {
//        ////        //        1.定义一个Block,返回值为bool,有两个NSString 实现判断两个字符串是否相等。
//        //
//        //        2.创建一个数组,初始化为@“123”,@“21”,@“33”,@“69”,@“108”,@“256”使用Block,进行数组排序,并输出内容
//        //
//        //        3.定义一个Block,返回值为NSInteger ,有两个参数,一个是NSArray 一个是NSString,实现判断数组时候包含此字符串,如果包含,返回字符串下标,如果不包含返回-1.
//        //(1)
//        printf("输入两个字符串
");
//        char str[2][10] = {0};
//        NSMutableArray * arr = [NSMutableArray array];
//        for (int i = 0; i < 2; i++) {
//            scanf("%s",str[i]);
//            NSString * str0 = [[NSString alloc]init];
//            NSString * str1 = [NSString stringWithUTF8String:str[i]];
//            arr[i] = [str0 stringByAppendingString:str1];
//        }
//        BOOL (^compareWithTwoNString)(NSString *,NSString *) = ^(NSString *s0,NSString *s1){
//            return [s0 isEqualToString:s1];
//        };
//        int isEqual = compareWithTwoNString(arr[0],arr[1]);
//        if (isEqual) {
//            NSLog(@"两次输入相等");
//        }else{
//            NSLog(@"两次输入不相等");
//        }
//        //(2)
//        NSMutableArray * muArr = [@[@"123",@"21",@"69",@"33",@"108",@"256"]mutableCopy];
//        [muArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//            return [obj1 compare:obj2];
//        }];
//        NSLog(@"排序之后为 %@",muArr);
//        //(3)
//        NSInteger(^isInIt)(NSArray *,NSString *) = ^(NSArray * arr,NSString * str){
//            NSInteger tem = 0;
//            for (int i = 0; i < [arr count]; i++) {
//                if ([arr[i] isEqualToString:str]) {
//                    tem++;
//                    NSLog(@"已经找到了");
//                    return tem ;
//                    break;
//                }
//             }
//            NSLog(@"没有找到");
//            tem = -1;
//            return tem;//注意这里的 return 的位置
//        };
//        NSArray * arrary = @[@"lu",@"zhang",@"huang ",@"li ",@"zhao",@"wang",@"qian"];
//        NSInteger afterFind = isInIt(arrary,@"wang");
//        NSLog(@"下标为%ld",afterFind);
//    }
        
//        @autoreleasepool {
//            //2 block的当做方法进行传值
//            LoginMangage * login1 = [[LoginMangage alloc]init];
//            [login1 initWithName:@"user" paswword:@"123456" succe:^(NSString *success) {
//                NSLog(@"%@",success);
//            } failure:^BOOL(NSString *errorMessage) {
//                NSLog(@"%@",errorMessage);
//                return 1;
//            }];
//        }
    
//    @autoreleasepool {
//        //3 一种Block排序的写法(貌似还是以前的方法哦)
//        NSArray * stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];
//        NSComparator sortBlock = ^(id string1 ,id string2){//貌似这里开始的三行代码没有什么作用
//            return [string1 compare:string2];
//        };
//        NSArray * sortArray = [stringArray sortedArrayUsingSelector:@selector(compare:)];
//        NSLog(@"排序后的为:%@",sortArray);
//    }
    
//    @autoreleasepool {
//        //4  用结构体(-1 0 1) NSComparisonResult 类型接收判断结果
//        NSString * str1 = @"123";
//        NSString * str2 = @"456";
//        NSComparisonResult(^compareStrings)(NSString *,NSString *) = ^(NSString * string1 ,NSString * string2){
//            return [string1 compare:string2];
//        };
//        NSComparisonResult resu = compareStrings(str1,str2);
//        if (resu == 1) {
//            NSLog(@"str1小于str2");
//        }
//        if (resu == -1) {
//            NSLog(@"str1大于str2");
//        }
//        if (resu == 0) {
//            NSLog(@"str1等于str2");
//        }
//    }
    
//    @autoreleasepool {
//        //5 打印出当前时区的时间(不是格林威治时间哦)
//        NSDate * datenow = [NSDate date];//注意这里不能写成了 NSData
////        NSLog(@"%@",datenow);//没有修改时间显示格式的的时候打印结果
//        NSString * datestring = @"yyyy年 MMM d 日 是一年的第 D 天 EEEE ahh:MM:SS";
//        NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
//        [formatter setDateFormat:datestring];
//        NSString * strdate = [formatter stringFromDate:datenow];
//        NSLog(@"获取当前时间为:%@",strdate);
//        //互联网
//        //时区转换,取得系统时区,取得格林威治时间差秒
//        //(http://www.isaced.com/post-175.html) 已经实现在控制台的转化为当前时区
//        NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];
//        NSLog(@"%f",timeZoneOffset/60.0/60.0);
//        datenow = [datenow dateByAddingTimeInterval:timeZoneOffset];
//        [formatter setDateFormat:@"现在日期:yyyy年MM月dd日
现在时刻:aHH:mm:ss"];
//        NSDate * dtime = [NSDate date];
//        NSString * newDateStr = [formatter stringFromDate:dtime];
//        NSLog(@"%@",newDateStr);
//    }
    
//    @autoreleasepool {
//        //6 练习-打印出当前时区的时间
//        NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];
//        NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
//        [dateFormatter setDateFormat:@"
现在日期:yyyy年 MM月 d 日 EEEE
 现在时间:aHH:mm:ss "];
//        NSDate * dateNow = [NSDate date];
//        dateNow = [dateNow dateByAddingTimeInterval:timeZoneOffset];
//        NSString * afterTrDate =  [dateFormatter stringFromDate:dateNow];
//        NSLog(@"当前时间:%@",afterTrDate);
//    }
    
//    @autoreleasepool {
//        //7  dateWithTimeIntervalSinceNow:的使用
//        NSDate * dateNow = [NSDate date];
//        NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];
//        [dateNow dateByAddingTimeInterval:timeZoneOffset];
//        NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
//        [dateFormatter setDateFormat:@"日期:yyyy年 MM 月 dd 日 EEEE
时间:aHH:mm:ss"];
//        NSString * afterDate = [dateFormatter stringFromDate:dateNow];
//        NSLog(@"
nowtime = %@",afterDate);
//        //获取到现在一段时间间隔的日期
//        NSDate * tomorrowDate = [NSDate dateWithTimeIntervalSinceNow:24*60*60];
//        NSString * afterDaterTomro = [dateFormatter stringFromDate:tomorrowDate];
//        NSDate * yestredayDate = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
//        NSString * afterDateYesday = [dateFormatter stringFromDate:yestredayDate];
//        NSLog(@"
tomorrowdate = %@
yesterday = %@ ",afterDaterTomro,afterDateYesday);
//    }
    
//    @autoreleasepool {
//        //8  (来自互联网-究竟是不是毫秒)获取自1970年以来的毫秒数的方法 ??????
//        NSDate * dateNow = [NSDate date];
//        NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
//        // NSTimeInterval返回的是double类型,输出会显示为10位整数加小数点加一些其他值
//        // 如果想转成int型,必须转成long long型才够大。
//        // 将double转为long long型
//        long long dTime = [[NSNumber numberWithDouble:time]longLongValue];
//        // 输出long long型
//        NSString * curTime = [NSString stringWithFormat:@"%llu",dTime];
//        NSLog(@"%@",curTime);
//    }
//    
//    @autoreleasepool {
//        //9  两个时间判断是否相等  获取时间间隔
//        NSDate * dateNow = [NSDate date];//获取当前时间
//        NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone]secondsFromGMT];//获取与格林威治时区的时差秒
//        [dateNow dateByAddingTimeInterval:timeZoneOffset];//格林威治时区加上时差
//        NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];//时间格式设置器
//        [dateFormatter setDateFormat:@"日期:yyyy年 MM 月 dd 日 EEEE  时间:aHH:mm:ss"];//注意这里的时间设置格式不能写错啦
//        NSString * afterTime = [dateFormatter stringFromDate:dateNow];
//        NSLog(@"%@",afterTime);
//        NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
//        NSTimeInterval timeInterval = [dateNow timeIntervalSinceDate:yesterday];
//        NSLog(@"%.f",timeInterval/24/60/60);
//        NSTimeInterval timeInterval1970 = [yesterday timeIntervalSince1970];
//        NSLog(@"1970年到现在的秒数为%.f",timeInterval1970);
//        //比较两个时间(返回一个枚举值)默认为升序
//        NSComparisonResult result = [dateNow compare:yesterday];
//        if (result != 0) {
//            NSLog(@"NSComparisonResult接收的结果是两个时间段不相等");
//        }
//        BOOL isEqual = [dateNow isEqualToDate:yesterday];
//        if (isEqual) {
//            NSLog(@"两个日期相等");
//        }else{
//            NSLog(@"两个日期不相等");
//
//        }
//    }
    
//    @autoreleasepool {
//        //10  catergroy 对 NSString 类的方法的扩展
//        NSString * str = @"HHH";
//        [str sayHi];
//        //只能添加方法
//        //为 NSString 扩充方法 :获取字符串的首字母并大写
//        NSString * oneString = [str getFirstCharacter];
//        NSLog(@"获取的首字母为:%@",oneString);
//        NSString * newStr = [str change];
//        NSLog(@"%@",newStr);
//        NSInteger num = 13523526302;
//        NSString * newstrnum = [[NSString alloc]init];
//        newStr = [str transToString:num];//把 NSInteger 型数字转化为 字符串数字
//        NSLog(@"%@",newStr);
//        NSInteger  nsnum = [newStr stringToValue];//把字符串数字转化为 NSInteger 型数字
//        NSLog(@"%ld",nsnum);
//    }
    
    return 0;
}
View Code  main.m  
//
//  NSString+Addition.h

#import <Foundation/Foundation.h>

@interface NSString (Addition)//这就是一个 NSString 类的 category(类方法的扩展)
-(void)sayHi;
//获取字符串的首字母并以大写的形式
- (NSString *)getFirstCharacter;
//把对应的字符串日期转化为特定的形式@"20150819"--@"2015.08.19"
- (NSString *)change;
//把基本整型转化为字符串类型
- (NSString *)transToString:(NSInteger)num;
//把字符串转化为基本的整型
- (NSInteger)stringToValue;
@end
View Code  NSString+Addition.h
//
//  NSString+Addition.m
//NSString+Addition.h"

@implementation NSString (Addition)
-(void)sayHi{
    NSLog(@"我是一个分类方法哦");
}
//获取字符串的首字母并以大写的形式
- (NSString *)getFirstCharacter{
//    return [[self substringToIndex:1]uppercaseString];
    return [[self substringToIndex:1]capitalizedString];
}
//把对应的字符串日期转化为特定的形式@"20150819"--@"2015.08.19"
- (NSString *)change{
//    NSDateFormatter * dateFormantter = [[NSDateFormatter alloc]init];
//    [dateFormantter setDateFormat:@"日期: yyyy年 MM月 dd日 EEEE 时间:aHH:mm:ss"];
       NSMutableString * newString = [NSMutableString stringWithString:self];
    if ([self length] < 8) {
        NSLog(@"长度不够");
    }else{
//        [str substringToIndex:4];//这是截取字符串的方法,这里搞混了,这里要插入
//        [str substringToIndex:7];
        NSString * str = @".";
        [newString insertString:str atIndex:4];
        [newString insertString:str atIndex:7];
    }
    return newString;
}
//把基本整型转化为字符串类型
- (NSString *)transToString:(NSInteger)num{
    NSString * newstr = [NSString stringWithFormat:@"%ld",num];
    return newstr;
}
//把字符串转化为基本的整型
- (NSInteger)stringToValue{
    return [self integerValue];
}
@end
View Code  NSString+Addition.m
//
//  LoginMangage.h
//  08-22Am
//

#import <Foundation/Foundation.h>

typedef void(^mysuccessblock) (NSString * accuntName);
typedef BOOL(^myfailureblock) (NSString * failure);
@interface LoginMangage : NSObject
-(void)initWithName:(NSString *)name
         paswword:(NSString *)password
            succe:(mysuccessblock)succes
          failure:(myfailureblock)errorMessage;

@end
View Code  LoginMangage.h
//
//  LoginMangage.m
//LoginMangage.h"

@implementation LoginMangage
-(void)initWithName:(NSString *)name
         paswword:(NSString *)password
            succe:(mysuccessblock)succes
          failure:(myfailureblock)errorMessage{
    if (name == @"user" && password == @"123456") {
       succes(@"登陆成功");
    }else{
        BOOL result = errorMessage(@"账户名或密码错误");
        if (result) {
            NSLog(@"错误已经处理");
            errorMessage(@"请重置密码");
        }else{
            NSLog(@"没有处理错误");
            errorMessage(@"请联系管理员");
        }
    }
}
@end
View Code  LoginMangage.m

//
//  main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "DownLoadManager.h"
#import "LoginManage.h"

//
int  maxValue(int,int);
int maxValue(int a, int b){
    return a > b ? a:b;
}
//2 Block变量的访问
int opennum = 10000;
//3
//4 简单的字符串拼接
//5 使用Block对字符串进行比较(NSComparisonResult)
//6 简单的Block 判断两个数字的大小
//7 对人的一些信息进行排序
//8 block的传值,与回调传值
int main(int argc, const char * argv[]) {
//    @autoreleasepool {
//        // insert code here...
//        NSLog(@"Hello, World!");
//        //函数指针
//        int (*p)(int,int) = maxValue;
//        int max = p(12,48);
//        NSLog(@"max = %d",max);
//        //block 语句块
//        int (^ minOfTwo)(int,int) = ^(int a, int b){
//            return a < b ? a : b;
//        };
//        int minoftwo = minOfTwo(45,4);
//        NSLog(@"min = %d",minoftwo);
//    }
    
//    @autoreleasepool {
//        // 2 Block变量的访问
//        __block int number = 20;
//        void (^myblock)(int) = ^(int a){
//            NSLog(@"用_block修饰的实例变量为%d",a);
//            number = 100;
//            NSLog(@"修改了Block外部定义的可在Block内被修改的数%d",number);
//            opennum += 1;
//            NSLog(@"全局变量无需用__block修饰就可以在这里被修改为%d",opennum);
//        };
//        myblock(number);
//    }
    
//    @autoreleasepool {
        //3 Block 拼接字符串
//        NSArray * strArr = @[@"Hello",@"UUUU",@"39"];
//        NSString *(^appendString)(NSArray *) = ^(NSArray * arr){
//          NSString * newstr = @"";
//            for (int i = 0; i < [arr count]; i++) {
//                NSString * append = arr[i];
//                newstr = [newstr stringByAppendingString:append];
//            }
//            return newstr;
//        };
//        NSString * strarry = appendString(strArr);
//        NSLog(@"拼接之后为:%@",strarry);
//    }
    
//    @autoreleasepool {
//    //4简单的字符串拼接
//        NSArray * arr = @[@"Hello",@"IIIII",@"39"];
//        NSString * newstr = [[NSString alloc]init];
//        NSString * newArr = [[NSString alloc]init];
//        for (int i = 0; i < [arr count]; i++) {
//            newstr = arr[i];
//          newArr = [newArr stringByAppendingString:newstr];
//        }
//        NSLog(@"%@",newArr);
//    }
//    
//    @autoreleasepool {
//        //5 使用Block对字符串进行比较(NSComparisonResult)
//        NSComparisonResult (^compareString)(NSString * , NSString *) = ^(NSString * arr1,NSString *arr2){
//            NSComparisonResult result = [arr1 compare:arr2];
//            if (result == NSOrderedSame) {
//                NSLog(@"arr1与 arr2 相等");
//            }
//            if (result == NSOrderedAscending) {
//                NSLog(@"arr1 小于 arr2");
//            }
//            if (result == NSOrderedDescending) {
//                NSLog(@"arr1 大于 arr2");
//            }
//             return result;
//        };
//       NSString * arr1 = @"HHHH";
//       NSString * arr2 = @"HHH";
//        compareString(arr1,arr2);
//    }
    
//    @autoreleasepool {
//        //6 简单的Block 判断两个数字的大小
//        void (^ compareTwoNum)(int a,int b) = ^(int a ,int b){
//            if (a > b) {
//                NSLog(@"第一个数大于第二个数");
//            }
//            if (a < b) {
//                NSLog(@"第一个数小于第二个数");
//            }
//            if (a == b) {
//                NSLog(@"两个数字相等");
//            }
//        };
//        compareTwoNum(12,78);
//        
//        //Block判断两个NSInteger的类型数字的大小(主义先进行转化为 NSNumber 类型数字)
//        NSComparisonResult (^compareNsinterger)(NSInteger ,NSInteger) = ^(NSInteger a, NSInteger b){
//            NSNumber * object1 = [NSNumber numberWithInteger:a];
//            NSNumber * object2 = [NSNumber numberWithInteger:b];
//            NSComparisonResult result = [object1 compare:object2];
////            NSNumber * obj1 = @(a);
////            NSNumber * obj2 = @(b);
//            return result;
//        };
//        NSComparisonResult comresult = compareNsinterger(45,78);
//        
//        //不可变数组的排序
//        NSArray * arr = [NSArray arrayWithObjects:@"hellow", @"TTTTTT", @"39", @"HHHH", @"WWWW", nil];
////        NSMutableArray * mutArr = [NSMutableArray arrayWithArray:arr];
//        NSArray * newArray = [arr sortedArrayUsingSelector:@selector(compare:)];
//        NSLog(@"默认的升序排列之后为:%@",newArray);
//        NSArray * newarr = [arr sortedArrayWithOptions:(NSSortOptions)1 usingComparator:^NSComparisonResult(id obj1, id obj2) {
//            return [obj1 compare:obj2];
//        }];
//        NSLog(@"%@",newarr);
//        
//        //可变数组的排序
////        NSArray * arr = [NSArray arrayWithObjects:@"hellow", @"JJJJJ", @"39", @"HHH", @"XXXX", nil];
//        NSMutableArray * mutArr = [NSMutableArray arrayWithArray:arr];//这里把上面的arr转化为一个可变数组并重新为可变数组开辟空间
//        NSMutableArray * mu2arr = [@[@"4",@"3",@"1",@"2"]mutableCopy];//将不可变数组转化为可变数组的mutableCopy方法
//        [mutArr sortedArrayUsingSelector:@selector(compare:)];//返回一个排好序的数组
//        [mu2arr sortUsingSelector:@selector(compare:)];
//        NSLog(@"%@",mutArr);
//        NSLog(@"%@",mu2arr);
////        使用Block可以改变排序的模式
//        [mu2arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//            return  -[obj1 compare:obj2];//很奇怪上面的两次排序不注释掉的话,这里不能实现降序排序???????是因为这里需要有一个 NSArray 的变量去接收一下就对了
//        }];
//        NSLog(@"%@",mu2arr);
//    }
    
//    @autoreleasepool {
//       //7  对人的一些信息进行排序
//        Person *per1 = [[Person alloc]initWithName:@"KKKKK" age:23 heigeht:1.78];
//        Person *per2 = [[Person alloc]initWithName:@"hangtian" age:30 heigeht:1.86];
//        Person *per3 = [[Person alloc]initWithName:@"liucuihua" age:34 heigeht:1.72];
//        Person *per4 = [[Person alloc]initWithName:@"zhangfeng" age:27 heigeht:1.68];
//        Person *per5 = [[Person alloc]initWithName:@"huangjunwei" age:25 heigeht:1.64];
//        Person *per6 = [[Person alloc]initWithName:@"zahnghong" age:19 heigeht:1.78];
//        Person *per7 = [[Person alloc]initWithName:@"shixiaofei" age:18 heigeht:1.70];
//        Person *per8 = [[Person alloc]initWithName:@"liusi" age:24 heigeht:1.75];
//        NSArray * perArr = [NSArray arrayWithObjects:per1,per2,per3,per4,per5,per6,per7,per8, nil];
////        NSArray * newPerArr = [perArr sortedArrayUsingSelector:@selector(compare:)];//方法一
//        NSArray * newPerArr = [perArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
////            return [[obj1 name] compare:[obj2 name]];//name升序排序
////            return [@([obj1 age]) compare:@([obj2 age]) ];//按照年龄升序排序
////            return [@([obj1 height])compare:@([obj2 height])];//按照升高升序排序
//            return [@([obj2 age]) compare:@([obj1 age])];
//        }];
//        NSLog(@"按年龄降序排序后为:%@",newPerArr);
//    }
    
//    @autoreleasepool {
//        //8  block的传值,与回调传值
//        DownLoadManager * down = [[DownLoadManager alloc]init];
//        [down download:^int(int n) {
//            NSLog(@"得到数字:%d",n);
//            return 45;//这里想用回调返回数字
//        }];
//        LoginManage * login = [[LoginManage alloc]init];
//        [login loginWithname:@"user" password:@"123456" success:^(NSString *accountName) {
//            NSLog(@"%@",accountName);
//        } failure:^BOOL(NSString *errorMessage) {
//            NSLog(@"%@",errorMessage);
//            return 0;
//            NSLog(@"%@",errorMessage);
//        }];
//    }
    
    return 0;
}
View Code  main.m 
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    NSString *_name;
    NSInteger _age;
    CGFloat _height;
}
//@property NSString * address;

-(void)setName:(NSString *)name;
-(NSString *)name;
-(void)setAge:(NSInteger)age;
-(NSInteger)age;
-(void)setHeight:(CGFloat)_height;
-(CGFloat)height;
//初始化
-(id)initWithName:(NSString *)name
              age:(NSInteger)age
          heigeht:(CGFloat)height;
//便利构造器
+(Person *)personWithName:(NSString *)name
                      age:(NSInteger)age
                   height:(CGFloat)height;
-(NSString *)description;
@end
View Code  Person.h
//
//  Person.m

#import "Person.h"

@implementation Person

-(void)setName:(NSString *)name{
    _name = name;
}
-(NSString *)name{
    return _name;
}
-(void)setAge:(NSInteger)age{
    _age = age;
}
-(NSInteger)age{
    return _age;
}
-(void)setHeight:(CGFloat)height{
    _height = height;
}
-(CGFloat)height{
    return _height;
}
//初始化
-(id)initWithName:(NSString *)name
              age:(NSInteger)age
          heigeht:(CGFloat)height{
    self = [self init];
    if (self) {
        _name = name;
        _age = age;
        _height = height;
    }
    return self;
}
//便利构造器
+(Person *)personWithName:(NSString *)name
                      age:(NSInteger)age
                   height:(CGFloat)height{
    Person * per = [[Person alloc]initWithName:name age:age heigeht:height];
    return per;
}
-(NSString *)description{
    return [NSString stringWithFormat:@"name:%@ age:%ld height:%.2f",_name,_age,_height];
}
@end
View Code  Person.m
//
//
#import <Foundation/Foundation.h>

typedef int (^myBlock) (int n);
typedef void (^myBlock1) (int n,int b);
@interface DownLoadManager : NSObject

-(int)download:(myBlock)block;
-(void)chuanzhi:(myBlock1)block1;

@end
View Code  DownLoadManager.h
//
//  DownLoadManager.m
//
#import "DownLoadManager.h"

@implementation DownLoadManager

-(int)download:(myBlock)block{
    NSLog(@"已经传值");
    return block(100);
}
-(void)chuanzhi:(myBlock1)block1{
    
}

@end
View Code DownLoadManager.m
//
//  LoginManage.h
//
#import <Foundation/Foundation.h>

typedef void(^successfulBlock) (NSString *accountName);
typedef BOOL(^failureBlook) (NSString *errorMessage);
@interface LoginManage : NSObject
-(void)loginWithname:(NSString *)name
            password:(NSString *)password
             success:(successfulBlock)success
             failure:(failureBlook)failure;
@end
View Code LoginManage.h
//
//  LoginManage.m
//
#import "LoginManage.h"

@implementation LoginManage
-(void)loginWithname:(NSString *)name
            password:(NSString *)password
             success:(successfulBlock)success
             failure:(failureBlook)failure{
    if ([name isEqualToString:@"user"] && [password isEqualToString:@"123456"]) {
        NSLog(@"登陆成功");
        success(name);
    }
    else{
        BOOL result = failure(@"账户或密码错误");
        if (result) {
            NSLog(@"错误已经处理");
            failure(@"请你重设登录密码");
        }
        else{
            NSLog(@"错误没有处理");
            NSLog(@"请尽快联系管理员重置密码");
        }
    }
}
@end
View Code LoginManage.m

原文地址:https://www.cnblogs.com/benpaobadaniu/p/4752763.html