• 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"]);

        

        

  • 相关阅读:
    全球化编码
    linuxGrep命令
    Xcode-插件所在路径
    多控制器间数据传递
    触摸事件
    IOS事件处理
    事件监听的三种方法
    UITabBarController
    聊天布局
    Info.plist:项目配置文件
  • 原文地址:https://www.cnblogs.com/hsxblog/p/4947049.html
Copyright © 2020-2023  润新知