OC (六)

来源:互联网 发布:淘宝上怎么买ig包 编辑:程序博客网 时间:2024/06/02 20:51
Block语法 Block使用 掌握Block方式实现数组排序Block  匿名函数:没有名称的函数。OC第六讲Block详细:block 类型: int(^)(int)block 变量:myBlockBlock值: ^ int (int  num){return 7*num;}即:^ 返回值类型(参数列表){ 函数体} 其中 返回值类型可以省略。Block    可以写在main函数内部。int strToInt(NSString *str); int strToInt(NSString *str){    return [str  intValue]; } //为block的原有类型做新类型定义 //int(^)(NSString *)----->BlockType typedef int (^BlockType) (NSString *); // c语言的冒泡排序函数。对OC的数组对象做排序 typedef BOOL (^CompareBlock)(NSString *,NSString *); void bubbleSortArray(NSMutableArray *array, CompareBlock compare); void bubbleSortArray(NSMutableArray *array,CompareBlock compare) {    NSInteger  count = [array count];//获取数组的元素个数    for (NSInteger i  = 0; i < count -1; i ++) {        for (NSInteger j = 0; j < count - 1 -i; j++) {            id object1 = [array objectAtIndex:j];                          id object2 = [array objectAtIndex:j+1];            if (compare(object1,object2)) {                [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];            }        }    } } int count = 0;//全局变量 //写⼀一个 返回值为整型 参数为OC字符串(仅⼀一个参 数)的block,实现将字符串转换为整型的功能    //因为匿名函数本身没有函数名,通过定义block变量相当于为匿名函数起了个函数名,以后再调用函数的时候就可以使用block变量名加实参的形式,与函数指针变量调用函数的格式一致。 1.block符合 局部变量的定义方式,     2.block是对匿名函数起的别名,所以又符合函数的特征。     3.在使用block变量时,使用方式与函数指针变量调用函数的方式一致。BlockType stringBlock= ^(NSString *str){        return [str intValue];    };    int result = stringBlock(@"123456");    NSLog(@"reslut = %d",result);    int (*StringPointer)(NSString *)= strToInt;    int result1 =StringPointer(@"123456");    NSLog(@"result1 =%d",result1);    NSMutableArray *array  = [NSMutableArray arrayWithObjects:@"21",@"23",@"33",@"32",@"12", nil];    NSLog(@"array  = %@",array);    //__block 修饰符可以允许block匿名函数内部访问其他函数定义的局部变量,例如index 变量是在main函数中定义的。    __block int  index = 0;    CompareBlock compare = ^(NSString *str1,NSString *str2){        count++;        index ++;        int number1 = [str1 intValue];        int number2 = [str2  intValue];        if (number1 > number2) {            return YES;        }        return NO;    };    bubbleSortArray(array,compare);    NSLog(@"array = %@",array);    NSLog(@"count = %d",count); NSArray *array =  [NSArray arrayWithObjects:@"12",@"122",@"44",@"1",@"77",@"14",@"4",@"9", nil];    //使用不可变数组的block排序方法    NSComparator compareBlock = ^(id str1, id str2){ //return [str2 compare:str1];//降序        int  number1 = [str1 intValue];        int number2 = [str2 intValue];        if (number1 < number2) {            return NSOrderedAscending;//升序        }        return NSOrderedDescending;//降序    };    NSArray *sortArray = [array sortedArrayUsingComparator:compareBlock];    NSLog(@"%@",sortArray);    NSMutableArray *mutaleArray = [NSMutableArray arrayWithArray:array]; //[mutaleArray sortUsingComparator:compareBlock];    [mutaleArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {        int number1 = [obj1 intValue];        int number2 = [obj2 intValue];        if (number1 < number2) {            return NSOrderedAscending;        }      return NSOrderedDescending;    }];    NSLog(@"%@",mutaleArray);

0 0
原创粉丝点击