在iOS中有个东西叫block,功能的话可以传递参数,封装代码
and so on。。。。
block格式
返回值类型(^block名)(形参s) = ^(形参s) {};
封装代码:
#import "ViewController.h"
void(^demoBlock)(NSInteger count);
@interface ViewController ()
@end
@implementation ViewController
@synthesize lab;
- (void)viewDidLoad {
[super viewDidLoad];
demoBlock = ^(NSInteger count)
{
NSInteger sum = 0;
for (int i = 0; i <=count; i++) {
sum+=i;
NSLog(@"%ld",(long)sum);
}
};
demoBlock(10);
}
代码中定义了一个无返回值,有参数的block,在ViewDidLoad中对block进行了赋值,把一段代码给予block,这样在调用到block时就会直接执行这段代码。
控制台输出
传递参数:
在nnvc中设置vc界面的标签text
设程序从ViewController(vc)跳转到nnViewController(nnvc)
在nnvc.h中声明block以方便vc跳转时调用
#import <UIKit/UIKit.h>
typedef void(^change)(id);
@interface nnViewController : UIViewController
@property(nonatomic,copy) change changeStr;
@end
在nnvc的ViewDidLoad中用self调用声明的block属性
- (void)viewDidLoad {
[super viewDidLoad];
self.changeStr(@"DDDDDDDDDDDDD");
// Do any additional setup after loading the view.
}
在vc中添加touch事件 touchBegin,在begin中初始化nnvc,并获取nnvc的changeStr属性且实现block
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
nnViewController* vc = [[nnViewController alloc]init];
vc.changeStr = ^(NSString* str)
{
self.lab.text = str;
};
[self.navigationController pushViewController:vc animated:YES];
}
it's done。
网友评论