• block的用法(作为属性、返回值和参数)


    block在实际开发中简便易用,主要用在回调,控制器之间的传值等方面。那下面对其用法进行分类

    直接上代码:(全部用的无参无返回值)

    第一种使用方法(作为属性)在当前使用的文件夹中进行赋值和调用

     1 ZWPerson.h文件中:
     2 
     3 #import <Foundation/Foundation.h>
     4 @interface ZWPerson : NSObject
     5 @property (strong, nonatomic)void(^play)();
     6 @end
     7 
     8 ViewController.m文件中:
     9 #import "ViewController.h"
    10 #import "ZWPerson.h"
    11 @interface ViewController ()
    12 @property (strong, nonatomic)ZWPerson *p;
    13 @end
    14 @implementation ViewController
    15 
    16 - (void)viewDidLoad {
    17     [super viewDidLoad];
    18     ZWPerson *p = [[ZWPerson alloc] init];
    19     p.play = ^(){
    20         NSLog(@"玩游戏");
    21     };
    22     _p = p;
    23 }
    24 
    25 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    26 {
    27     //在当前文件夹中,哪里需要就可以直接调用这个方法
    28     _p.play();
    29 }
    30 @end

    第二种使用方法(作为方法参数)主要是外界不能调用,只能在方法内部进行调用,用于回调和传值等

    也可以直接在当前文件夹,定义一个方法调用

     1 ZWPerson.h文件中:
     2 
     3 #import <Foundation/Foundation.h>
     4 @interface ZWPerson : NSObject
     5 
     6 - (void)eat:(void(^)()) bolck;
     7 
     8 @end
     9 
    10 ZWPerson.m文件中:
    11 #import "ZWPerson.h"
    12 @implementation ZWPerson
    13 - (void)eat:(void(^)())block
    14 {
    15     NSLog(@"吃美味");
    16     block();
    17 }
    18 @end
    19 
    20 ViewController.m文件中:
    21 #import "ViewController.h"
    22 #import "ZWPerson.h"
    23 @interface ViewController ()
    24 @property (strong, nonatomic)ZWPerson *p;
    25 
    26 @end
    27 @implementation ViewController
    28 
    29 - (void)viewDidLoad {
    30     [super viewDidLoad];
    31 
    32     ZWPerson *p = [[ZWPerson alloc] init];
    33     [p eat:^{
    34         NSLog(@"睡觉");
    35     }];
    36 }
    37 @end

    第三种使用方法(作为方法返回值)内部不能调用,只能外界调用,相当于代替了方法!

     1 ZWPerson.h文件中:
     2 #import <Foundation/Foundation.h>
     3 @interface ZWPerson : NSObject
     4 - (void(^)())run;
     5 @end
     6 
     7 ZWPerson.m文件中:
     8 #import "ZWPerson.h"
     9 @implementation ZWPerson
    10 - (void (^)())run
    11 {
    12     return ^(){
    13         NSLog(@"跑了3公里");
    14     };
    15 }
    16 @end
    17 
    18 ViewController.m文件中:
    19 #import "ZWPerson.h"
    20 @implementation ZWPerson
    21 - (void)viewDidLoad {
    22     [super viewDidLoad];
    23     ZWPerson *p = [[ZWPerson alloc] init];
    24     //可以直接通过点语法调用run,如果有参数,()表示里面可以传参数,
    25     p.run();
    26 }
  • 相关阅读:
    C# winform 打包成安装程序(exe)
    gitHub----【Mac】sourcetree连接github,报错:fatal:Authentication failed for'https://git…。或提示password required 解决方案
    python3-----往一个字符串中循环添加数据
    python3.8----从多层嵌套Json中解析所需要的值
    记录一些工作知识
    【转】彻底搞懂 async & defer
    【转】判断JS数据类型的四种方法
    动态表单设计
    封装,继承,多态
    语义化版本
  • 原文地址:https://www.cnblogs.com/hissia/p/5684991.html
Copyright © 2020-2023  润新知