ios block

释放双眼,带上耳机,听听看~!

block一直用的少,今天在网上看了些,想要记录一下。

在xcode上 打inlineBlock 会出现block的格式

 returnType(^blockName)(parameterTypes) = ^(parameters) {
statements
};

返回值的格式(^ block名字)(参数的类型) =^( 参数){

}

block可以用在控制器间的反向传值


//在ViewController.m中,跳转的时候调用ViewController2的block,取值
#import "ViewController2.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
ViewController2 *vc = [[ViewController2 alloc] init];
vc.myBlock=^(NSString *valueStr){
NSLog(@"传入的值是:%@",valueStr);
};
[self presentViewController:vc animated:YES completion:nil];
}
//在ViewController2中定义block 为属性
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface ViewController2 : UIViewController
//block 无返回值,名字:myBlcok 参数为NSString类型
@property(nonatomic,copy) void(^myBlock)(NSString *valueStr);
@end
NS_ASSUME_NONNULL_END
/*************************************/
//在ViewController2.m,返回上一界面的时候block传值
@interface ViewController2 ()
@end
@implementation ViewController2
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
if (self.myBlock) {//如果上个页面调用这个block,就执行下面的方法
self.myBlock(@"好好学习,天天向上");
}
[self  dismissViewControllerAnimated:YES completion:nil];
}

/*********************************************/

block可以用做方法参数

//block作为参数  block是 无返回值,参数为NSString 类型的
-(void)block_1:(void(^)(NSString* b_str))finish{
NSLog(@"先处理block_1中的事件");
if (finish) {
finish(@"123");
}
}
[self block_1:^(NSString *b_str) {
NSLog(@"完成block_1中事件成功后:%@",b_str);
}];
/*****************************************************/
//block作为参数 block是返回值为NSString 类型的,有NSString类型的参数,
-(void)block_2:(NSString *(^)(NSString* c_str))myBlock {
NSString *tempStr = @"_text";
if (myBlock) {
tempStr= myBlock(tempStr);
NSLog(@"tempStr = %@",tempStr);
}
}
[self block_2:^NSString *(NSString *c_str) {
return [NSString stringWithFormat:@"拼接字符串:%@",c_str];
}];
2018-11-20 15:48:52.988420+0800 block[59220:1333754] 先处理block_1中的事件
2018-11-20 15:48:52.988594+0800 block[59220:1333754] 完成block_1z中事件成功后:123
2018-11-20 15:48:52.988720+0800 block[59220:1333754] tempStr = 拼接字符串:_text
/*****************************************************/

block作为返回值的例子,参类似计算器数值相加来实现block做返回值的链式编程,

//MyTool.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface MyTool : NSObject
@property (nonatomic, assign)NSInteger  result; //相加的结果
// 返回值为block的方法,block的返回值为这个类的本身,参数为NSInteger
-(MyTool* (^)(NSInteger))add;
@end
NS_ASSUME_NONNULL_END
//MyTool.m
#import "MyTool.h"
@implementation MyTool
-(MyTool* (^)(NSInteger))add{
return ^(NSInteger value){
self->_result += value;
return self;
};
}
@end
//NSObject+Tool.h  NSOBject的category
#import <Foundation/Foundation.h>
#import "MyTool.h"
NS_ASSUME_NONNULL_BEGIN
@interface NSObject (Tool)
// block做参数的类方法 block的返回值为空 参数为MyTool
+(NSInteger)text_makeTool:(void (^)(MyTool *))block;
@end
NS_ASSUME_NONNULL_END
//NSObject+Tool.m
#import "NSObject+Tool.h"
@implementation NSObject (Tool)
+(NSInteger)text_makeTool:(void (^)(MyTool *))block{
MyTool *myTool = [[MyTool alloc] init];
block(myTool);
return myTool.result;
}
@end
//使用
NSInteger value = [NSObject text_makeTool:^(MyTool * tool) {
tool.add(10).add(20).add(30);
}];
NSLog(@"values===%ld",(long)value);
2018-11-20 15:48:52.988840+0800 block[59220:1333754] values===60

只是想记录一下,主要参考大神的文章:https://www.jianshu.com/p/30259711d080

这是大神的原文。

人已赞赏
iOS文章

iOS UITextView 文字处理

2020-3-2 15:22:53

iOS文章

iOS 页面跳转的问题

2020-3-2 16:01:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索