block在實際開發中簡便易用,主要用在回調,控制器之間的傳值等方面。那下面對其用法進行分類
直接上代碼:(全部用的無參無返回值)
第一種使用方法(作為屬性)在當前使用的文件夾中進行賦值和調用
ZWPerson.h文件中: #import <Foundation/Foundation.h> @interface ZWPerson : NSObject @property (strong, nonatomic)void(^play)(); @end ViewController.m文件中: #import "ViewController.h" #import "ZWPerson.h" @interface ViewController () @property (strong, nonatomic)ZWPerson *p; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; ZWPerson *p = [[ZWPerson alloc] init]; p.play = ^(){ NSLog(@"玩游戲"); }; _p = p; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //在當前文件夾中,哪裡需要就可以直接調用這個方法 _p.play(); } @end
第二種使用方法(作為方法參數)主要是外界不能調用,只能在方法內部進行調用,用於回調和傳值等
也可以直接在當前文件夾,定義一個方法調用
ZWPerson.h文件中: #import <Foundation/Foundation.h> @interface ZWPerson : NSObject - (void)eat:(void(^)()) bolck; @end ZWPerson.m文件中: #import "ZWPerson.h" @implementation ZWPerson - (void)eat:(void(^)())block { NSLog(@"吃美味"); block(); } @end ViewController.m文件中: #import "ViewController.h" #import "ZWPerson.h" @interface ViewController () @property (strong, nonatomic)ZWPerson *p; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; ZWPerson *p = [[ZWPerson alloc] init]; [p eat:^{ NSLog(@"睡覺"); }]; } @end
第三種使用方法(作為方法返回值)內部不能調用,只能外界調用,相當於代替了方法!
ZWPerson.h文件中: #import <Foundation/Foundation.h> @interface ZWPerson : NSObject - (void(^)())run; @end ZWPerson.m文件中: #import "ZWPerson.h" @implementation ZWPerson - (void (^)())run { return ^(){ NSLog(@"跑了3公裡"); }; } @end ViewController.m文件中: #import "ZWPerson.h" @implementation ZWPerson - (void)viewDidLoad { [super viewDidLoad]; ZWPerson *p = [[ZWPerson alloc] init]; //可以直接通過點語法調用run,如果有參數,()表示裡面可以傳參數, p.run(); }