iOS开发常用之block传值

原创未经允许,不得转载
开发中会常用到传值,正向传值很简单不必多说,那么反向传值就需要一提了,有block传值,代理传值等等。。今天咱们就来说说非常简单实用的block传值。。话不多说上代码。

- (IBAction)Positioning:(id)sender {
    HSInstalltMapViewController * IMVC = [[HSInstalltMapViewController alloc] init];
    //先弱化self
    __weak __typeof(self)weakSelf = self;
    //block的实现
    IMVC.getCoordinate = ^(NSString * lat,NSString * lon){
        weakSelf.deviceCoordinate.text = [NSString stringWithFormat:@"%@,%@",lat,lon];

    };

    [self.navigationController pushViewController:IMVC animated:YES];
}

注意,block的实现一定要是在控制器创建的时候。这个时候block里面的代码块不会执行,等待block调用后再单独执行。()里面的是调用的时候传过来的值,必须是类型和名称组合,缺一不可,位置对应。拿到值就可以操作了,如何调用见下文。

@interface HSInstalltMapViewController : UIViewController
//block的申明
@property(nonatomic,copy)void(^getCoordinate)(NSString *,NSString*);

这里的申明要在.h文件里面,对外开放,blockd修饰词必须是copy

void(^getCoordinate)(NSString *,NSString*)

void意思是返回值为空,一般情况下返回值都是空,如果具有返回值那么可以添加,例如 NSArray (^getCoordinate)(NSString ,NSString*),前面的NSArry 不可加();(^getCoordinate)为block名称,^为block符号,后面的就是名字,调用时用;(NSString ,NSString*)就是带的参数了,这里表示带两个字符串类型的参数。除了第一个返回值不能加(),后面的名称和参数都是必须加()。

最后一步就是调用了:

-(void)operationbtnclick{
    //block的调用
    self.getCoordinate(_latitude,_longitude);
    [self.navigationController popViewControllerAnimated:YES];
}

这里的调用没什么可多说,参数类型对应就可以了。与实现时的参数位置对应。

注意的是block在代码中的执行顺序

1.block前的代码
{
2.block内部代码
}
3block后的代码
执行的时候就是先走1,然后走3,最后在调用block的时候再走2。所以如果是在block内部赋值,在3使用,是不行的。应该将3也放入2中执行

block传值就说到这里 ,是不是很简单?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值