美文网首页
oc 中的延展 和 block语法

oc 中的延展 和 block语法

作者: 下页天 | 来源:发表于2016-10-10 21:34 被阅读48次
    • 外部延展
      • 外部延展的作用:用于在特定的场景,公开原类中在.m中 声明/实现 的属性、成员变量、方法
    • 内部延展--匿名延展
      • 在本类的 .m文件中声明的延展,匿名延展,可以保证在本类中使用成员变量和属性,不被外部访问,runtime可以访问.
    //外部延展创建文件  Person_Pub.h
        #import "Person.h"
        @interface Person ()
        @property (nonatomic,copy) NSString *height;
        -(void)goPub;   
        @end
    //匿名延展 内部延展
    @interface Person ()
    {
        NSString *_height;
        CGFloat _weight;
    }
    @property(nonatomic, copy) NSString *height;
    @property (nonatomic, assign) CGFloat weight;
    
    @end
    
    

    oc中的block语法

    block块语法  是一种带返回值和参数的数据类型 本质是一个函数
    

    返回值(^block名字)(数据类型 参数名1,数据类型 参数名2)

    • 1.声明block变量

      void(^blockName)(NSInteger age,NSString *name);
      
    • 2.实现block变量

      blockName = ^(NSInteger age,NSString *name){
          NSLog(@"age = %ld  name = %@",age,name);
      }
      
    • 3.调用block

      blockName(23,@"苍姐姐");
      
      
    • 4.block作为函数参数 改变了block代码的执行顺序

      [self useBlock:^(NSString *str, NSInteger age) {
          NSLog(@"name = %@,age = %ld",str,age);
      }];
      -(void)useBlock:(void(^)(NSString * str,NSInteger age))block{
          //调用block
          block(@"苍姐姐",23);
      }
      
    • 5.block作为返回值 可以用作链式编程里面

      -(int(^)())returnABlock{
      int(^block)() = ^{
          NSLog(@"作为返回值的block被调用了");
          return 5;
      };
      return block;
      }
          int b = [self returnABlock]();
          NSLog(@"block的返回值 b = %d",b);
      
    • 链式编程实现

        //声明
      @interface JSQTool : NSObject
      @property(nonatomic,assign)CGFloat result;
      @property(nonatomic,copy)JSQTool * (^add)(NSInteger num) ;
      @end
       //实现
      @implementation JSQTool
      -(JSQTool *(^)(NSInteger))add{
        JSQTool *(^block)(NSInteger num) = ^(NSInteger num){
            _result += num;
            return self;
        };
        return block;
      }
      //调用
        JSQTool * tool = [[JSQTool alloc]init];
        CGFloat result = tool.add(10).add(20).add(30).result;
        NSLog(@"result = %f",result);
      
      

    相关文章

      网友评论

          本文标题:oc 中的延展 和 block语法

          本文链接:https://www.haomeiwen.com/subject/dvyvyttx.html