OC基础 :Block(据说是重难点) 数组高级

来源:互联网 发布:jb是什么意思网络用语 编辑:程序博客网 时间:2024/06/03 02:29

          OC第六讲


//快捷键系统键加逗号,调背景颜色

//

#import <Foundation/Foundation.h>

//课前定义个指针求和


int sum(int x,int y){

      return x+y;}


int main(int argc,constchar * argv[]) {

    @autoreleasepool {

        // insert code here...

        NSLog(@"Hello, World!");

        

        

        //  Block(据说是重难点) 数组高级

        

        /*

         Block:块语法,本质上是匿名函数(没有名称的函数)

         标准C里面没有匿名函数,在C语言后期的版本中才加入了匿名函数

         c++js,swift中也有类似语法,叫做闭包

         Block和函数指针很相似

         */

        

        /*

        //定义返回两个数之和的指针,

        int (*k)(int x,int y);

        k = sum;

        NSLog(@"k = %d",k(1,1));

         */

     

        int mulitipier = 7;

        int (^myfirstBlock)(int) = ^int/*这个int可以省略*/(int num/*num这个名字可以随便给哦,但别与系统关键字重复就好*/){return num * mulitipier; };

        /*

         int         :    block块的返回值类型

         (^myBlock)  :    ^block类型标示符,myfirstBlock是块语法的名字

         (int)       :    括号内是block的参数类型可以有多个参数或者是没有参数;没有参数用void(其实不写也行)

         =           :    等号右边是定义块对象的语法结构(相当于函数的定义),然后给myfirstblock的返回值赋值

         ^           :    block类型的标示符

         int         :    block类型的返回值

         (int num)   :    参数列表,这个地方必须有参数名

         {}          :    block内部实现

         ;           :    不要忘记以分号结尾(大括号内也有分号)

        

         block类型    :    int(^)int

         block变量名  :     myfirstblock

         block     :     ^(int) (int num){return num * 7}

         ^返回值类型(参数名){函数体};其实返回值类型可以省略

         */

        

//block调用

   int a =     myfirstBlock(7);

        NSLog(@"a = %d",a);

        

        /*找的博客:

         链接:http://www.cnblogs.com/wayne23/p/4026313.html

         */

//无返回值无参

//        void (^myBlock)(void);

        void (^myBlock1)(void) = ^void(void){NSLog(@"这是一个无返回值无参的block");};

        //调用。当block没有参数的时候也需要在block变量名后面加上括号

        myBlock1();

        

//无返回值有参

        void (^lllBlock1)(int) = ^(int num){};

//有返回值无参

//        int (^kkkblock)(void) = ^int(void){return 1212;};

        NSInteger (^cccblock)(void) = ^NSInteger(void){return 1111;};

        NSLog(@"cccblock = %lu",cccblock());

        

 //有返回值有参

        NSString *(^aaablock)(NSString *) = ^NSString *(NSString *str){

            NSString * resultstr =

            [str stringByAppendingString:@"hello"];

            return resultstr;

        };

        NSString *str = aaablock(@"word");

        NSLog(@"str = %@",str);

        

      /*

             void (^myBlock1)(void);  //无返回值,无参数

       

       void (^myBlock2)(NSObject, int); //有返回值,有参数

       NSString* (^myBlock3)(NSString* name, int age); //有返回值和参数,并且在参数类型后面加入了参数名(仅为可读性)

          */

        

  






0 0