美文网首页
快速查询知识点:块枚举,block传值,枚举的定义和循环,通知,

快速查询知识点:块枚举,block传值,枚举的定义和循环,通知,

作者: LennonLin | 来源:发表于2016-11-16 15:31 被阅读50次

    块枚举

     // 字典和NSSet是无序的
        NSDictionary *dic = @{@"test1" : @1, @"test2" : @2, @"test3" : @3, @"test4" : @4 };
        
        [dic enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSNumber *obj, BOOL * _Nonnull stop) {
            NSLog(@"key = %@", key);
            NSLog(@"obj = %@", obj);
            if ([obj isEqual:@3]) {
                *stop = NO; // 当对象为3的时候就的时候就不执行 但是4会继续执行
            }
           
        }];
        
        [[dic allKeys] enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"obj1 === %@",obj);
            NSLog(@"index === %ld",idx);
        }];
    

    block传值

    快速查询

    • A页面.h
    @class LXKLoginParameterModel;
    
    // 块:^ 申明的block变量名:parametreModelBlock  参数类型:LXKLoginParameterModel
    typedef void(^parameterModelBlock)(LXKLoginParameterModel *);
    
    // 返回值类型为NSString
    typedef NSString *(^parameterModel)(LXKLoginParameterModel *);
    
    @interface B2_LXKRegisterViewController : UIViewController
    
    // 在栈中 所以使用copy
    @property (nonatomic, copy) parameterModelBlock block;
    
    @end
    
    • A页面.m
              // 申明一个变量可以在快内修改
             // __block phone = _parameterModel.phone;
             // 成功才会有的回调
            __weak typeof(self) weakSelf = self;
            [LXKRegisterLoginViewModel userRegister:_parameterModel getUserIdCallback:^(NSString *userId) {
                // 因为我在一个回调的block里所以才使用的weakSelf
                NSAssert(weakSelf.parameterModel.phone && weakSelf.parameterModel.password, @"传递到登录页面的手机号或者密码为空");
                if (weakSelf.block) {
                    weakSelf.block(weakSelf.parameterModel);
                }
            }];
    
    
    • 从A传递到B页面
     __weak typeof(self) weakSelf = self;
        registerVC.block = ^(LXKLoginParameterModel *model) {
            // self的变量,合成了_parameterModel,可以不使用__block来修饰就可以改变
            weakSelf.parameterModel.phone = model.phone;
            weakSelf.parameterModel.password = model.password;
        };
    

    枚举的定义和循环

    
    /**定义复用界面类型*/
    typedef NS_ENUM(NSInteger, LXKRegisterMultiplexType) {
        LXKRegisterMultiplexTypeRegister = 1 << 0, // 注册页面
        LXKRegisterMultiplexTypeForgetPassword = 1 << 1, // 忘记密码
        LXKRegisterMultiplexTypeModifyPassword = 1 << 2, // 修改登录密码页面
    };
    
    /**复用的界面类型  是基本数据类型所以用assgin*/
    @property (nonatomic, assign) LXKRegisterMultiplexType multiplexType;
    
    • .m页面循环
    
    if (_multiplexType) {
            switch (_multiplexType) {
                case LXKRegisterMultiplexTypeRegister:
                    self.title = @"注册";
                    break;
                case LXKRegisterMultiplexTypeForgetPassword:
                    self.title = @"忘记密码";
                    break;
                case LXKRegisterMultiplexTypeModifyPassword:
                    self.title = @"修改密码";
                    break;
                default:
                    break;
            }
        }
    

    通知

    • 发送通知的页面:
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"circleUnreadMessageCount" object:self userInfo:@{@"messageCount" : @1}];
    
    
    • 收到通知并且释放:
    
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshCircle:) name:@"circleUnreadMessageCount" object:nil];
    

    协议

    • .h
    // 这个更具tag值来点击视图判断点击视图
    
    @protocol LXKMeHeaderViewDelegate <NSObject>
    
    @optional
    
    - (void)LXKMeHeaderViewDelegate:(NSUInteger )viewTag;
    
    @end
    
    @interface LXKMeHeaderView : UIView
    
    /**协议 根据tag值来判断点击的是哪一个*/
    @property (nonatomic, weak) id <LXKMeHeaderViewDelegate> delegate;
    
    @end
    
    • .m
    #pragma mark - action
    
    - (void)avatarImageViewTap:(UITapGestureRecognizer *)sender {
        if ([_delegate conformsToProtocol:@protocol(LXKMeHeaderViewDelegate)]) {
            [_delegate LXKMeHeaderViewDelegate:[sender view].tag];
        }
    }
    

    相关文章

      网友评论

          本文标题:快速查询知识点:块枚举,block传值,枚举的定义和循环,通知,

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