#import <Foundation/Foundation.h>
#import "Person.h"
// 给block起别名
//typedef <#returnType#>(^这写新名字)(<#arguments#>);
int sumValue(int a, int b)
{
return a + b;
}
int resultTwoNumber(int num1, int num2, int (^block)(int a, int b))
{
return block(num1,num2);
};
int main(int argc, const char * argv[]) {
// 回顾 函数指针:指向函数的指针
// 保存的函数地址
// (例)两个数的和的函数
// int (*p)(int a, int b) = NULL;
// p = sumValue;
// // 函数指针调用
// p(3,5);
// printf("%d\n",p(3,5));
//
// Block标志 ^ 托字符(凸起符)
// Block保存的是 有特定功能的函数体
// int(^变量名)(int a,int b) = ^初值(跟前面类型要一致)
// 初值的部分 是一个没有名字的 函数体
// int (^Block)(int a,int b) = ^int (int a,int b){
// return a + b;
// };
// // 打印参数的block OC的
// // 无返回值 void
//
//
// void (^PrintfBlock)(NSString *str) = ^void (NSString *str){
// NSLog(@"%@",str);
// };
//
block的调用 直接使用block的名字去调用
// PrintfBlock(@"哈哈");
//
// block类型 NSInteger (^)(NSString *str)
// block名 B
// block的值 匿名的函数 并且类型与Block类型相同
// 匿名函数是函数 其函数中定义的变量 存在栈区
//
// NSInteger (^B)(NSString *str) = ^NSInteger (NSString *str){
//
// return [str intValue];
//
// };
// NSLog(@"%ld",B(@"15"));
//
//
// NSInteger (^block1)(NSInteger a, NSInteger b) = ^NSInteger (NSInteger a,NSInteger b){
//
// return a + b;
//
// };
// block作为参数 体现优势
// 实现 两个数的 加减乘除
// int result = resultTwoNumber(15, 3, ^int(int a, int b)
// {
// return a / b;
//
// });
//
// NSLog(@"%d",result);
// block的好处
// 当把block当做一个参数 传入方法中
// 非常灵活 可以灵活掌控block的实现
// 也就是 你传入的block实现的是什么功能
// 你这个方法 就实现什么功能
// block排序
// NSMutableArray *array = [NSMutableArray arrayWithObjects:@11,@5,@7,@19, nil];
//
// NSNumber *n1 = [NSNumber numberWithInt:11];
// // 语法糖 初始化NSNumber类型方法
// NSNumber *n2 = @11;
// [array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//
//
// // 实现部分 填写 obj1 和obj2 的关系
// // 实现原理: 数组中两个元素进行比较
// // 比较后 返回值 如果前面币后面打则 交换
// // 经此比较到最后一个元素 完成排序
//
// // compare:可以比较的类型
// // 1.字符串类型(NSString *)
// // 2.NSNumber *类型
//
// NSNumber *str1 = (NSNumber *) obj1;
// NSNumber *str2 = (NSNumber *) obj2;
//
// // 利用交换位置来排序
//
// if ([str1 compare:str2] > 0) {
// return NSOrderedDescending;
// }else if ([str1 compare:str2]){
// return NSOrderedSame;
// }else{
// return NSOrderedAscending;
// }
//
// }];
// NSLog(@"%@",array);
// NSMutableArray *array = [NSMutableArray arrayWithObjects:@11,@5,@7,@19, nil];
//
// NSComparisonResult (^MyCopmpare)(id obj1, id obj2) = ^NSComparisonResult (id obj1,id obj2){
// // 先确定类型
// NSNumber *str1 = (NSNumber *)obj1;
// NSNumber *str2 = (NSNumber *)obj2;
//
// if ([str1 compare:str2] > 0) {
// return NSOrderedDescending;
// }else if ([str1 compare:str2]){
// return NSOrderedSame;
// }else{
// return NSOrderedAscending;
// }
//
// };
//
//
//
//
// // 根据类型 确定 升序 还是 降序
//
//
// };
//
//[array sortUsingComparator:MyCopmpare];
//
//
//NSLog(@"%@",array);
// 需要什么类型 咱们就给什么类型 就行
// Person *p1 = [[Person alloc]initWithName:@"wade" age:30];
// Person *p2 = [[Person alloc]initWithName:@"kobe" age:35];
// Person *p3 = [[Person alloc]initWithName:@"durant" age:24];
// Person *p4 = [[Person alloc]initWithName:@"james" age:27];
// Person *p5 = [[Person alloc]initWithName:@"rose" age:23];
// // 初始化可变数组
// NSMutableArray *array = [NSMutableArray arrayWithObjects:p1,p2,p3,p4,p5, nil];
// // 按姓名排序
//
// [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
// // 先判断类型
// Person *p1 = (Person *)obj1;
// Person *p2 = (Person *)obj2;
// // 姓名 升序排序
//
// if ([[p1 name] compare:[p2 name]] > 0) {
// return NSOrderedDescending;
// } else if([[p1 name] compare:[p2 name]] == 0){
// return NSOrderedSame;
// } else{
// return NSOrderedAscending;
// }
//
// }];
// [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// // 先判断类型
// Person *p1 = (Person *)obj1;
// Person *p2 = (Person *)obj2;
// // 再判断排序
// if ([p1 age] > [p2 age]) {
// return NSOrderedDescending;
// } else if([p1 age] == [p2 age]) {
// return NSOrderedSame;
// }else
// return NSOrderedAscending;
// }];
// NSLog(@"%@",array);
//
// // 字面量的使用(语法糖)
// // 切记:字面量使用的初始化方法 是类方法的初始化
// NSArray *array = [NSArray arrayWithObjects:@"1",@"2",nil];
// // 相当于
// NSArray *arrayN = @[@"1",@"2"];
//
// // 取出一个元素
// [arrayN objectAtIndex:0];
// // 相当于
// arrayN[0];
//
// NSNumber *num = [NSNumber numberWithInteger:11];
// // 相当于
// NSNumber *num1 = @11;
//
return 0;
}