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();
}