• 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

  • 相关阅读:
    UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
    initWithFrame方法的使用
    加载xib文件,如果想在初始化的时候就添加点东西就重载-(id)initWithCoder:(NSCoder *)aDecoder
    Mac os 下brew的安装与使用—— Homebrew
    Mac os系统gdb调试器的安装与使用
    项目里如何访问AppDelegate
    leetcode 141. Linked List Cycle
    leetcode 206. Reverse Linked List
    从阿里巴巴面试题到java类加载机制
    SpringBoot处理日期转换问题
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/4752763.html
Copyright © 2020-2023  润新知