block 块语法

  block 块语法.  --- 匿名函数

  block可以在函数内部定义匿名函数.

 blocK -- 实现两个数的最大值.

#import <Foundation/Foundation.h>
#import "Person.h"
//1.输出I love ios
void output() {
    printf("I love ios\n");
}
//2.求两个数的最大
 int maxValue(int x, int y) {
     return x > y ? x : y;
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
      
//方法一:直接打印
        output();
        
        int max = maxValue(2, 5);
        printf("max = %d", max);
   
        
//方法二:定义指针变量
        void (*p)() = NULL;
        p  = output; //指针指向对应的函数;
        p();

        int (*p)(int, int) = NULL;
        p = maxValue;
        int max =  p(2, 5);
        printf("max = %d", max);
        
        
//方法三:函数重命名(打印多个同类型,会比较方便)
        typedef int (*PFUN)(int, int);  //将函数类型重命名为PFUN
        PFUN p1 = NULL;
        p1 = maxValue;
        int max = p1(2, 5);
        printf("max = %d", max);
//第四种方法 --- block      
 int (^max)(int, int) = ^int(int a, int b) {
            return a > b ? a : b;
        };
        //如何调用block块
       int value = max(4, 6);
        printf("value = %d", value);

Block ----  块语法

 

1.输出I love ios
        typedef void (^Hi)();
        Hi sayHi = ^void() {
            NSLog(@"I love ios\n");
        };
        sayHi();

 

2.定义block, 将整数转换为字符型
        typedef NSString *(^TranForm1)(int);
       TranForm1 change = ^NSString *(int c) {
             return [NSString stringWithFormat:@"%d", c];
         };
        NSString *str = change(9);
        NSLog(@"str = %@", str);
3.定义block,将整数转换为NSNumber对象
        typedef NSNumber *(^TranForm2)(int);
        TranForm2 change1 = ^NSNumber *(int c1) {
            return @(c1);
        };
        NSNumber *num = change1(4);
        NSLog(@"%@", num);
4.定义block, 将字符串全部转化为大写
        typedef NSString *(^TransForm3)(NSString *);
        TransForm3 change3 = ^NSString *(NSString *c2) {
            return [c2 uppercaseString];
        };
        NSString *str1 = change3(@"I love ios");
        NSLog(@"str1 = %@", str1);
5.定义block,实现求字符串的长度
        typedef NSUInteger (^Str)(NSString *);
        Str length = ^NSUInteger (NSString *c3) {
            return [c3 length];
        };
        NSUInteger length1 = length(@"jideh");
        NSLog(@"%lu", length1);
6.定义block,实现求数组中元素的个数
        typedef NSUInteger (^Str)(NSArray *);
        Str count1 = ^NSUInteger (NSArray *c4) {
            return [c4 count];
        };
        NSUInteger count = count1(@[@"i", @"ji", @"ghud"]);
        NSLog(@"%lu", count);
7.定义block,实现两个整数的比较
        typedef NSComparisonResult (^NSComparison)(NSInteger, NSInteger);
       NSComparison compare = ^NSComparisonResult (NSInteger a, NSInteger b) {
            return a > b ? NSOrderedDescending : a == b ? NSOrderedSame : NSOrderedAscending;
        };
        NSComparisonResult result = compare(6, 7);
        NSLog(@"%ld", result);
8.定义block, 两个字符串比较
        typedef NSComparisonResult (^Compare1)(NSString *, NSString *);
        Compare1 compare1 = ^NSComparisonResult (NSString *str1, NSString *str2) {
            return [str1 compare:str2];
        };
        NSComparisonResult result1 = compare1(@"jdshf", @"sjd");
        NSLog(@"result1 = %ld", result1);
9.定义block, 两个NSnumber比较
        typedef NSComparisonResult (^Compare3)(NSNumber *, NSNumber *);
        Compare3 compare2 = ^NSComparisonResult (NSNumber *str1, NSNumber *str2) {
            return [str1 compare:str2];
        };
        NSComparisonResult result2 = compare2(@36, @87);
        NSLog(@"result2 = %ld", result2);

数组的升序排序

 

//不可变数组升序
        NSArray *arr1 = @[@"jdi", @"Hu", @"fk", @"kdi", @"dj"];
        NSArray *sortedArr = [arr1 sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"%@", sortedArr);

 

block 实现降序排序

 

//block可以用于给没有源代码的类,添加方法(假象)
        NSArray *arr2 = @[@"ii", @"aa", @"dd",@"cc"];
        NSArray *sortArr = [arr2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            //实现排序block.
            //将obj1和obj2转化为字符串形式
            NSString *str1 = (NSString *)obj1;
            NSString *str2 = (NSString *)obj2;
            return -[str1 compare:str2];
            //(compare默认当前者比后者大时,返回1,两者调换,升序)符号表示降序 或obj1和obj2点换位置(也表示降序)
        }];
        NSLog(@"%@", sortArr);

 

Student *stu1 = [Student studentWithName:@"xiaoming" age:19 score:90 number:1536];
        Student *stu2 = [Student studentWithName:@"xiaohua" age:28 score:35 number:7474];
        Student *stu3 = [Student studentWithName:@"jiajai" age:28 score:64 number:3785];
        Student *stu4 = [Student studentWithName:@"xiaohong" age:29 score:23 number:3647];
        NSMutableArray *mArry = [NSMutableArray arrayWithObjects:stu1, stu2, stu3, stu4, nil];
        //按年龄升序排序
        [mArry sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Student *stu1 = (Student *)obj1;
            Student *stu2 = (Student *)obj2;
            NSInteger age1 = [stu1 age];
            NSInteger age2 = [stu2 age];
            return [@(age1) compare:@(age2)];
        }];
        NSLog(@"%@", mArry);

        //按成绩降序
        [mArry sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            return  -[@([(Student *)obj1 score]) compare:@([(Student *)obj2 score])];
        }];
        //按姓名降序
        [mArry sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Student *stu1 = (Student *)obj1;
            Student *stu2 = (Student *)obj2;
            NSString *name1 = [stu1 name];
            NSString *name2 = [stu2 name];
            return -[name1 compare:name2];  //name本身就是字符串所以不用转换
           // return [[(Student *)obj2 name] compare:[(Student *)obj1 name]];

        }];
        //按学号升序
        [mArry sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//            Student *stu1 = (Student *)obj1;
//            Student *stu2 = (Student *)obj2;
//            NSInteger number1 = [stu1 number];
//            NSInteger number2 = [stu2 number];
           // return [@(number1) compare:@(number2)];
            return [@([(Student *)obj1 number]) compare:@([(Student *)obj2 number])];
        }];
        
        
//        //按年龄升序排序
//        [mArry sortUsingSelector:@selector(compareByAge:)];
//        NSLog(@"%@", mArry);
//        //按成绩降序排序
//        [mArry sortUsingSelector:@selector(compareByScore:)];
//        NSLog(@"%@", mArry);
//        //按姓名降序排序
//        [mArry sortUsingSelector:@selector(compareByName:)];
//        NSLog(@"%@", mArry);
//        //按学号升序排序
//        [mArry sortUsingSelector:@selector(compareByNumber:)];
//        NSLog(@"%@", mArry);

 

转载于:https://www.cnblogs.com/SummerSunshine/articles/4195967.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值