美文网首页
iOS block简单使用

iOS block简单使用

作者: 铃鹿山大魔王 | 来源:发表于2019-04-03 13:59 被阅读0次

一般用法

结果外传

  • 声明
@interface HeaderView : UIView

/// header touch call back
@property (nonatomic, copy) void(^touchCallBack)(NSInteger uid);

@end
  • 外传
- (void)headerViewIsTocuh {
    if (self.headerTouchCallBack) {
        self.headerTouchCallBack(self.uid);
    }
}
  • 实现
- (HeaderView *)headerView {
    if (_headerView == nil) {
        _headerView = [[HeaderView alloc]init];
        __weak typeof(self) weakSelf = self;
        _headerView.touchCallBack = ^(NSInteger uid) {
            /// 事件处理
        };
    }
    return _headerView;
}

可适当使用block,将事件结果外传。

其它用法

参数外传

  • 声明
@interface Worker : NSObject

+ (void)work:(void(^)(WorkerConfig *config))request success:(void(^)(id result))success failure:(void(^)( NSError *error))failure;

@end

@interface WorkerConfig : NSObject

@property (nonatomic, assign) NSInteger uid;

@end
  • 外传
+ (void)work:(void(^)(WorkerConfig *config))request success:(void(^)(id result))success failure:(void(^)( NSError *error))failure {
    __block WorkerConfig *config = [[WorkerConfig alloc]init];
    if (request) {
        request(config);
    }
    /// 根据config做逻辑处理
    /// ...
    if (success) {
        
    }
    if (failure) {
        
    }
}
  • 实现
__weak typeof(self) weakSelf = self;
[Worker work:^(WorkerConfig *config) {
    /// 配置config
    config.uid = 1;
} success:^(id result) {
    ///
} failure:^(NSError *error) {
    ///
}];

固化参数,外部只需对固化的参数进行赋值即可。

双向block

  • 声明
@interface HeaderView : UIView

/// header touch call back
@property (nonatomic, copy) void(^ headerTouchCallBack)(NSInteger uid, void(^result)(NSDictionary *data));

@end
  • 外传
- (void)headerViewIsTocuh {
    if (self.headerTouchCallBack) {
        /// 外传uid
        self.headerTouchCallBack(self.uid, ^(NSDictionary *data) {
            /// 处理接收的data数据
        });
    }
}
  • 实现
- (HeaderView *)headerView {
    if (_headerView == nil) {
        _headerView = [[HeaderView alloc]init];
        __weak typeof(self) weakSelf = self;
        _headerView.touchCallBack = ^(NSInteger uid, void (^result)(NSDictionary *data)) {
            /// 接收uid并进行处理
            /// ...
            /// 处理结果反向block
            if (result) {
                result(x);
            }
        };
    }
    return _headerView;
}

双向block,可使逻辑变的更简单,尤其是依赖外传操作结果时。

特殊用法

delegate + block

一般,delegate事件外传,其结果,需要同步返回。但当需要异步执行操作,如何通过delegate一个方法,即可拿到结果回调呢?delegate+block?可实现,但用法比较偏。

相关文章

  • ios block使用

    iOS Block的使用一 .最简单的block使用******使用block的三个步骤:1.定义block变量 ...

  • block 实用小例子

    本篇是简单介绍iOS 开发中block的使用(附demo): /* 声明一个block (返回类型)(^block...

  • iOS Block存储域及循环引用

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block __block说明符...

  • iOS Block实现原理

    系列文章:iOS Block概念、语法及基本使用iOS Block __block说明符iOS Block存储域及...

  • iOS block简单使用

    一般用法 结果外传 声明 外传 实现 可适当使用block,将事件结果外传。 其它用法 参数外传 声明 外传 实现...

  • iOS Block __block说明符

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block存储域及循环引用 上一...

  • Block-介绍

    Block简单介绍首先Block是iOS中比较特殊的一种数据类型Block是苹果官方比较推荐使用的数据类型,应用也...

  • block编程, __block, __weak, __stro

    参考:block编程iOS __weak和__strong在Block中的使用__block & __weak &...

  • Block 初见

    Block 初见 介绍 iOS block 的相关知识 目录 Block 背景知识 Block 使用方式 Bloc...

  • iOS block的简单使用

    本人用block比较少,可以说是几乎没怎么用过,但是最近发现block也挺好用的,所以决定重温一下关于block ...

网友评论

      本文标题:iOS block简单使用

      本文链接:https://www.haomeiwen.com/subject/mgaabqtx.html