Block 语法练习

//函数是具有特定功能的代码段

    //一个严格的函数, 包括函数声明, 函数定义, 函数调用

    //block块儿语法, 是在函数内部,定义一个block, block块执行效率比较高

    //函数指针指向函数首地址, 这样指针就可以调用函数

    //函数指针类型的重命名

    //typedef 函数返回值类型(*新函数名) ()

    

    

    //block块儿语法

    //返回值类型(^块儿语法名)(参数类型1, 参数名1 参数类型2, 参数名2, ....)()

    //参数类型与参数名之间用空格隔开, 两个参数之间用逗号隔开) = ^(参数类型1  参数1, 参数类型2 参数2, ....)

    //int(^块语法名)(参数类型, 参数名) = ^(参数类型, 参数名) {//等号前面的参数可以省略

    //return .......;

   // };

    //求两个数最大值

    

    int(^max)(int number1, int number2) = ^(int number1, int number2 ) {

        int max = number1 > number2 ? number1 : number2;

        return max;

    };

    NSLog(@"%d", max(100, 120));

//    int(^maxNumber)(int number1, int number2) = ^(int number1, int number2) {

//        int maxNumber = number1 > number2 ? number1:number2;

//        return maxNumber;

//    };

 //   NSLog(@"%d", maxNumber(100, 120));

 

    //实现将字符串转换为整型

    int(^change)(NSString *) = ^(NSString *str2) {

        int str1 = [str2 intValue];

        return str1;

    };

    NSLog(@"%d", change(@"123"));

    

    //求字符对应的ASCLL;

    NSInteger(^ACLL)(char) = ^(char c) {

        NSInteger a = c;

        return a;

    };

    NSLog(@"%ld", ACLL('c'));

    //用%d打印一个字符, 就会得到这个字符的ASCLL值

    

    int(^middle)(int, int, int) = ^(int num1, int num2, int num3) {

        //int max = (num1 > num2 ? num1 : num2) > num3 ? (num1 > num2 ? num1 : num2) : num3;

        //int max = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);

        //引用宏定义

        int max = MAX(num1, MAX(num2, num3));

        int min = num1 < num2 ? (num1 < num3 ? num1 : num3) : (num2 < num3 ? num2 : num3);

        

        return num3 + num2 + num1 - max - min;

    };

    NSLog(@"%d", middle(4, 3, 6));

    //在block内部不能修改局部变量的值, 如果要修改局部变量的值,就要把变量修改成全局变量, 或者 用 __block修饰这个变量

    

    //数组的排序

    //compare:方法提供相邻两元素的比较, 只能升序排列,

    

    //提供相邻元素的比较规则NSOrderedAscending的条件, 就是最后排列的顺序

    //写法1//通过块儿语法, 指定了一个规则rule

    NSArray *array = [NSArray arrayWithObjects:@"30", @"12", @"4", @"100", @"1000", nil];

    NSComparisonResult(^rule)(NSString *, NSString *) = ^(NSString *str1, NSString *str2) {

        if ([str1 intValue] < [str2 intValue]) {

            return NSOrderedAscending;//上升

        }else if ([str1 intValue] == [str2 intValue]){

            return NSOrderedSame;

        }else{

            return NSOrderedDescending;

        }

    };

    //1.

   // NSArray *sortArray = [array sortedArrayUsingSelector:@selector(compare:)];

    //2.

    NSArray *sortArray = [array sortedArrayUsingComparator:rule];

    NSLog(@"%@", sortArray);

    

    Student *stu1 = [[Student alloc] initWithName:@"chengqiang" num:2];

    Student *stu2 = [[Student alloc] initWithName:@"bengbeng" num:3];

    Student *stu3 = [[Student alloc] initWithName:@"dengdeng" num:4];

    NSArray *mArray = [[NSArray alloc]initWithObjects:stu1, stu2, stu3, nil];

    NSComparisonResult(^rule1)(Student *, Student *) = ^(Student *stu1, Student *stu2) {//自定义块儿语法

//        if ([stu1 num] > [stu2 num]) {

//            return NSOrderedAscending;

//        }else if ([stu1 num] == [stu2 num]) {

//            return NSOrderedSame;

//        }else{

//            return NSOrderedDescending;

//        }

        return [[stu1 name] compare:[stu2 name]];

    };

    NSArray *mSortArray = [mArray sortedArrayUsingComparator:rule1];

    for (Student *stu in mSortArray) {

        NSLog(@"%@, %ld", [stu name], [stu num]);

    }

    

    NSArray *kArray = [mSortArray sortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2) {

        //        if ([stu1 num] > [stu2 num]) {

        //            return NSOrderedAscending;

        //        }else if ([stu1 num] == [stu2 num]) {

        //            return NSOrderedSame;

        //        }else{

        //            return NSOrderedDescending;

        //        }

        return [[stu1 name] compare:[stu2 name]];

    }];

    for (Student *stu in kArray) {

        NSLog(@"%@, %ld", [stu name], [stu num]);

    }

    

    //语法糖

    NSNumber *num = [NSNumber numberWithInt:100];//把数值转化成对象

    //快速创建一个字典, 用语法糖创建的数组 和 字典 都是不可变的

    NSDictionary *dic = @{@"name":@"小明", @"gender":@"男", @"age":@"18"};

    //取字典里的value值

    NSLog(@"%@", dic[@"name"]);

    

    

 

posted @ 2015-11-08 11:42  HSX  阅读(212)  评论(0编辑  收藏  举报