最近有个朋友问我iOS中的block 是怎么用的,
我根据自己的所学把实际应用的一些写法告诉他了
因为我觉得这个主要是更注重实用性,
好了废话不多说,直接上实际的
------
实际上使用 通常是进行 block 传值,A 页面--> B页面 如果是正向的话,那么我们把B页面的值传给A就叫做 反向传值(或者叫做回调)。
步骤:
1. 谁发送消息,谁就写block(同代理的使用)
#import <UIKit/UIKit.h>
typedef void(^myBlock)(NSString *str);
@interface DetailViewController : UIViewController
// 生成一个 block 属性
@property(nonatomic, copy) myBlock block;
@end
2.在B.m 文件中进行传值--- 当B页面要消失的时候,调用自己的block传值
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 调用 自己的block 给它传入一个 实参
NSString *str = @"你好我是detail页面传入的字符串";
// block 是基于C语言的函数,直接传参调用<具体的实现在消息的接收方A>
self.block(str);
[self dismissViewControllerAnimated:YES completion:^{
}];
}
3. 就是在 A页面,接收B页面传过来的值了 ----- < 在创建B页面类实例的时候,进行实现 b.block 接收它传入的参数>
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
DetailViewController *detail = [[DetailViewController alloc] init];
// 直接调用 detail的 block 实现
detail.block = ^(NSString *str){
// 打印传进来的 str
NSLog(@"str :%@",str);
};
// 跳转到 detail页面
[self presentViewController:detail animated:YES completion:^{
}];
}
---------------------------- 这就是 Block 语法使用的 3部曲 了--------------------
怎么样是不是很简单??
下面看看效果图把
============后延==========
Block的一些小定义,估计懂了上面已稍微一看就懂了,仅供参考
1.block可以用来保存一段代码,或者用来封装一段代码。--->代码段,代码块。
2.block的标志是^
3.block跟函数很像 (其实它就是C语言函数)
可以保存代码;
可以有返回 值;
也可以有行参;
调用方式一样;
4.定义一个block
#pragma mark 不带参数的block
void (^outputblock)() = ^{
NSLog(@"------------");
};
outputblock();
}
5.带行参的block
#pragma mark - 带参数的block
int (^sumblock)(int, int) = ^(int a,int b){
return a+b;
};
int sum = sumblock(3,13);
int sum1 = sumblock(1,2);
NSLog(@"%d",sum1);
NSLog(@"%d",sum);
#pragma mark - 输出n条横线
// Block的 声明和实现
void(^myblock)(int) = ^(int n){
for (int i = 0; i < n; i++) {
NSLog(@"-----------------");
}
};
//block 的调用
myblock(10);
6.如果block没有行参,可以省略后边的小括号。
7.使用typedef来定义一个block的类型
typedef int(^Myblock)(int,int);
Myblock sumblock = ^(int a,int b){
return a+b;
}
Myblock minus = ^(int a,int b){
return a-b;
}
8.block可以访问外边的变量,也可以修改外部的局部变量
必须提前声明
例如 __block int a = 5;
用 __block 修饰过的变量 可以在调用 Block的时候修改它的值
后记:
关于 Block 其实还有很多的小知识点
在这里我就先说这么多把,主要是能实用了,以后我会尽快把 比较完整的 Block 的知识写上来,供所有有需要的朋友参考。。