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