代碼塊簡單使用

//
//  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;
}
相關文章
相關標籤/搜索