iOS开发-block 简单使用

本文介绍 iOS 开发中 Block 的基本用法及应用场景,包括简单使用示例、内部修改值、反向传递值等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人iOS新手一枚,刚自行学习了下的block,哪里不对的地方,请指出微笑

例举1:block的简单使用

void无返回值,^(myFirstBlock)命名,()无类型

    void (^myFirstBlock)() = ^{
        NSLog(@"this is a block");//这里写需要实现哪些功能
    };


例举2:block的简单使用

int返回值类型,int a,int b 传参的类型,这里返回为a+b的int类型

    int (^addBlock)(int a,int b) = ^(int a,int b){
        return a + b;
    };

然后在想用的地方调用一下,传递a和b参数

    int add = addBlock(2,3);
    NSLog(@"add=%d",add);

ps:输出结果add=5


例举3:block的简单使用

block内部需要修改数值

    NSArray *arr = @[@"dog",@"cat",@"cow",@"pig"];
    
    __block BOOL isExist = NO;//这里需要在前面加上 __block
    
    //枚举arr数组查询
    [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj compare:@"cow"] == NSOrderedSame){ //NSOrderedSame 表示前者和后者完全一样
            isExist = YES;
        }
    }];
    
    if (isExist) {
        NSLog(@"存在");
    }else{
        NSLog(@"不存在");
    }

例举4:block用于反向传值

两个控制器 控制器1 和 present出来的第二个控制器2

控制器2代码 .h 里面

typedef void(^myBlock) (NSString *msg);//定义一个block,myBlock,用于传递 NSString类型 的信息

#import <UIKit/UIKit.h>

@interface nextViewController : UIViewController

@property (nonatomic,copy)myBlock msgBlock;//重命名了block

@end

控制器2代码 .m 里面,在返回上一个页面(控制器1)的按钮里传递参数

- (IBAction)backBtnClick:(UIButton *)sender {
    ViewController *VC = [[ViewController alloc] init];//实例化上一个页面
    
    if (self.msgBlock) {
        self.msgBlock(@"我来自第二个页面"); //传递参数
    }

    [self dismissViewControllerAnimated:VC completion:^{}];
}

然后,控制器1 .m代码

在弹出第二个页面(控制器2)的方法里面调用block(这里就是控制器2传递回来的参数)

- (IBAction)nextBtnClick:(UIButton *)sender {
    nextViewController *nextVC = [[nextViewController alloc] init];
    
    nextVC.msgBlock = ^(NSString *msg){
        NSLog(@"这里要得到第二个页面的文字-------%@",msg);
    };
    
    [self presentViewController:nextVC animated:YES completion:^{}];
}

ps:打印结果:这里要得到第二个页面的文字-------我来自第二个页面

反向传值还是很普及的,这都是很简单的用法,block里面不要强引用,记得用__weak修饰,先写到这里,后期再添加block相关的新内容奋斗


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值