OCdemo-06 Block

//
//  main.m
//  OCdemo-06
//
//  Created by lanou3g on 15/10/14.
//  Copyright (c) 2015年 Object. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"




void sayHi(){
    NSLog(@"hello");
}
int maxValue(int a, int b){
    return a > b ? a : b;
}


int number2 = 20; //定义一个全局变量


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        

#pragma mark 函数指针
        //调用函数
        sayHi();
        int max = maxValue(2,3);
        NSLog(@"max = %d",max);
        //定义一个函数指针,指向 sayHi
        void (*p)() = NULL;
        p = sayHi;
        
        //定义一个函数指针,指向 maxValue
        int (*q)(int , int) = NULL;
        q = maxValue;
        
        //通过函数指针 调用函数
        p();
        int max1 = q(4,5);
        NSLog(@"max1 = %d",max1);
        
        
#pragma mark block
        // sayHiBlock 是一个block 变量名
        // block 的类型: void (^)()
        // ^  只是用来表示这是一个block 对象,和函数指针中的 * 一样,只是一个标示作用
        
        void (^sayHiBlock)()  = ^void (){
            NSLog(@"hello,我是一个block");
        };
        sayHiBlock();
        
        //定义匿名函数时,返回值类型可以省略
        //定义一个block,求两个数的最大值
        int (^maxBlock)(int , int) = ^(int a,int b){
            return a > b ? a : b;
        };
        //调用
        int max2 = maxBlock(8,9);
        NSLog(@"max2 = %d",max2);
        
        //定义一个block,求两个数的和
        int (^sumBlock)(int , int) = ^(int a, int b){
            return a + b;
        };
        int sum = sumBlock(1,2);
        NSLog(@"a + b = %d", sum);

        //写一个 返回值为整型 参数为OC字符串(仅一个参数)的block,实现将字符串转换为整型的功能
        int (^changeStringToIntBlock)(NSString *) = ^(NSString *string){
            return [string intValue];
        };
        NSString *str = @"123";
        int n = changeStringToIntBlock(str);
        NSLog(@"%d",n);
        
        //定义一个block,返回值是NSString对象,参数是一个NSArray 对象,实现从数组中取出第三个元素的功能
        NSString *(^block)(NSArray *) = ^NSString *(NSArray *array){
            if ([array count] >= 3) {
                return [array objectAtIndex:2];
                //return array[2];
            }else{
                return @"";
            }
        };
        NSArray *array = @[@"stu1",@"stu2",@"stu3"];
        NSString *_result = block(array);
        NSLog(@"%@",_result);
        
        
#pragma mark Block的typedef
        typedef int (^MaxBlock)(int , int );
        MaxBlock maxblock = ^(int a ,int b){
            return a > b ? a : b;
        };
        NSLog(@"%d",maxblock(2,3));
        
        
        typedef int (^ChangeStringToIntBlock)(NSString *);
        ChangeStringToIntBlock change = ^(NSString *string){
            return [string intValue];
        };
        NSLog(@"%d",change(@"456"));
        
        
        
        /*
#pragma mark block与局部变量
        
        //如果想要在block 内部修改局部变量的值,需要加“__block”修饰
        
       __block int number = 10;
        int (^addBlock)(int) = ^(int a){
        
            int sum = a + number;  // block 内部可以使用局部变量
            
            sum += number2;   //全局变量可以在 block 内部使用
            number2++;        // 和 修改
            
            
            number++;              // 在 block 内部不能直接修改局部变量的值
            return sum;
        
        };
        NSLog(@"sum = %d",addBlock(5));
        //-------------------------------
        __block int c = 1;
        int (^sumBlock)(int, int) = ^(int a, int b){
            
            int sum1 = a + b;
            
            sum1 += c;
            
            return sum1;
        };
        NSLog(@"sum1 = %d",sumBlock(5,6));
         //-------------------------------
        
#pragma mark Block与数组排列
        NSArray *sortArray = @[@"dahuang",@"huangshang",@"xiaojie",@"yizhang",@"tongzhuo"];
        
//        sortArray = [sortArray sortedArrayUsingSelector:@selector(compare:)];
//        NSLog(@"%@",sortArray);
        
        sortArray = [sortArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            
            return [obj1 compare:obj2];
        }];
        
        NSLog(@"%@",sortArray);
        
        //定义一个 block 变量 用来排序
        NSComparator sortedArray = ^NSComparisonResult(id obj1, id obj2){
            
            //降序排列
            return -[obj1 compare:obj2];
        };
        
        sortArray = [sortArray sortedArrayUsingComparator:sortedArray];
        NSLog(@"%@",sortArray);
        //-----------------------------------------------------------------
        
        //可变数组排序
        NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"haohao",@"xiaoqiangzi",@"xiaohuangzi",@"xiaoxingzi",@"yizhang" ,nil];
        
        NSComparator mSortBlock = ^NSComparisonResult(id obj1, id obj2){
            
            return [obj1 compare:obj2];
        };
        
        [mArray sortUsingComparator:mSortBlock];
        NSLog(@"%@",mArray);
        
        
        */
        
        Student *stu1 = [Student studentWithNum:@"3838438" name:@"D大黄" age:38];
        Student *stu2 = [Student studentWithNum:@"58" name:@"L老王吧" age:39];
        Student *stu3 = [Student studentWithNum:@"7" name:@"X小范" age:18];
        Student *stu4 = [Student studentWithNum:@"61" name:@"H皇上" age:80];
        Student *stu5 = [Student studentWithNum:@"59" name:@"C村长" age:25];
        
        NSMutableArray *studentArray = [NSMutableArray arrayWithObjects:stu1,stu2,stu3,stu4,stu5, nil];
        
        //按照学生的姓名排序
        [studentArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Student *student1 = obj1;
            Student *student2 = obj2;
            
            return [[student1 getName] compare:[student2 getName]];
        }];
        //遍历数组
        for (Student *stu in studentArray) {
            NSLog(@"%@",stu);
        }
        
        //按照学生的年龄排序
        [studentArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Student *student1 = obj1;
            Student *student2 = obj2;
            
            if ([student1 getAge] < [student2 getAge]) {
                return NSOrderedAscending;
            } else  if ([student1 getAge] > [student2 getAge]) {
                return NSOrderedDescending;
            } else {
                return NSOrderedSame;
            }
        }];
        //遍历数组
        for (Student *stu in studentArray) {
            NSLog(@"%@",stu);
        }
        
#pragma mark 字面量
        
        //使用字面量创建字符串对象
        NSString *string = @"字符串";
        //使用字面量创建数组对象
        NSArray *array2 = @[@1,@2,@3,@"haha"];
        //从数组中取出元素
        NSLog(@"%@",array2[3]);
        //使用字面量创建字典对象
        NSDictionary *dict = @{
                               @"name":@"dahuang",
                               @"gender":@"母",
                               @"hobby":@"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、使用Category,为NSArray添加两个公有方法;(10分) 1)计算NSArray中所有对象值的和(针对NSString及NSNumber对象) 2)实现查找功能(不使用系统自带查找方法,- (BOOL)containsObject:(id)anObject;使用类目实现其原理) 2、新建Teacher、Student类,并完成下列操作:(30分) (1) Teacher类持有5个学生(students),每个学生拥有姓名和4门课程考试分数集合;(5分) (2)实现Student的方法来计算当前学生的平均分;(5分) (3)声明一个Student的委托协议和必选一个协议方法,该协议方法可以在 学生计算完成平均分后告诉委托计算结果;(5分) (4)让Teacher遵守(3)中协议并与每个Student间建立委托的设计模式, 在Student平均分计算完成之后Teacher对每个学生平均分进行记录, 并输出。(10分) (5)给Teacher添加一个方法,将students数组中找出平均分最高的学生。(5分) 3、模拟一个商品销售系统,完成下列问题:(60分) 1)现有三种打折商品:书、茶杯、钢笔,每种商品都包含共有的三种属性: 编号、售价、折扣率,最终售价为当前售价与折扣率的乘积; 2)可将三种商品根据商品名称或则编号的形式,添加入购物车,客户不需要时,可移除购物车中指定的商品,客户可以随时查看购物车列表,显示购物车中所有商品的详细信息; 3)最后客户离开时,可以结账离开; 注意: 1)可封装一个类,专用于用户输入信息; 2)代码冗余的处理; 3)用户体验; 4)代码规范,命名、细节点处理;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值