[非凡程序员]代码块简单使用

//
//  main.m
//  daimakuai
//
//  Created by 非凡程序员_02 on 15/11/3.
//  Copyright (c) 2015年 非凡程序员_02. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //普通代码块
        void (^my_block)(void)=^
        void{
            NSLog(@"无参代码块");
        };
        //代码块调用
        my_block();
        
        //有参数和返回值的普通代码块
        int (^my_block1)(int)=^
        (int number){
            return number*number;
        };
        //定义变量接收返回的数据
        int a=my_block1(5);
        NSLog(@"有参数的代码块:%d",a);
        
        
        //构造代码块
        typedef void (^jiafa) (int,int);
        jiafa jia=^(int num1,int num2){
            int a;
            for (int i=num1; i<=num2; i++) {
                a+=i;
            }
            NSLog(@"%d",a);
        };
        jia(23,34);
        
        //下面的这个代码块可以对数组元素进行排序
        NSArray *array=@[@"hello",@"world",@"add"];
        NSArray *array1=[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            NSLog(@"XXX%@,%@",obj1,obj2);
            return [obj1 compare:obj2];
        }];
        NSLog(@"%@",array1);
        
        
        //静态代码块:在普通代码块前面加上static关键字,一般是在递归调用的时候定义这样的类型。以下是两个计算1-10相加和的例子
        //第一种方法
        static int (^sum_blocks)(int)=^(int i)
        {
            if (i<11) {
                i=sum_blocks(i+1)+i;
            }
            return i;
        };
        sum_blocks(0);
        //第二种方法
        static int num=0;
        static void (^blocks)(int)=^(int i)
        {
            if (i>0) {
                num+=i;
                blocks(i-1);
            }
        };
        blocks(10);
        NSLog(@"1-10的和是:%d",num);
        
        //__block 定义变量的值可以在代码块中修改,__block定义的变量不能在静态代码块里面使用
        __block double c=3;
        void (^multiply)(double,double)=^(double a,double b){
            c=a*b;
        };
        multiply(2,4);
        NSLog(@"%f",c);
        
        
    }
    return 0;
}






你可能感兴趣的:([非凡程序员]代码块简单使用)