塊枚舉
// 字典和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的時候就的時候就不執(zhí)行 但是4會繼續(xù)執(zhí)行
}
}];
[[dic allKeys] enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"obj1 === %@",obj);
NSLog(@"index === %ld",idx);
}];
block傳值
快速查詢
@class LXKLoginParameterModel;
// 塊:^ 申明的block變量名:parametreModelBlock 參數(shù)類型:LXKLoginParameterModel
typedef void(^parameterModelBlock)(LXKLoginParameterModel *);
// 返回值類型為NSString
typedef NSString *(^parameterModel)(LXKLoginParameterModel *);
@interface B2_LXKRegisterViewController : UIViewController
// 在棧中 所以使用copy
@property (nonatomic, copy) parameterModelBlock block;
@end
// 申明一個變量可以在快內(nèi)修改
// __block phone = _parameterModel.phone;
// 成功才會有的回調(diào)
__weak typeof(self) weakSelf = self;
[LXKRegisterLoginViewModel userRegister:_parameterModel getUserIdCallback:^(NSString *userId) {
// 因為我在一個回調(diào)的block里所以才使用的weakSelf
NSAssert(weakSelf.parameterModel.phone && weakSelf.parameterModel.password, @"傳遞到登錄頁面的手機號或者密碼為空");
if (weakSelf.block) {
weakSelf.block(weakSelf.parameterModel);
}
}];
__weak typeof(self) weakSelf = self;
registerVC.block = ^(LXKLoginParameterModel *model) {
// self的變量,合成了_parameterModel,可以不使用__block來修飾就可以改變
weakSelf.parameterModel.phone = model.phone;
weakSelf.parameterModel.password = model.password;
};
枚舉的定義和循環(huán)
/**定義復(fù)用界面類型*/
typedef NS_ENUM(NSInteger, LXKRegisterMultiplexType) {
LXKRegisterMultiplexTypeRegister = 1 << 0, // 注冊頁面
LXKRegisterMultiplexTypeForgetPassword = 1 << 1, // 忘記密碼
LXKRegisterMultiplexTypeModifyPassword = 1 << 2, // 修改登錄密碼頁面
};
/**復(fù)用的界面類型 是基本數(shù)據(jù)類型所以用assgin*/
@property (nonatomic, assign) LXKRegisterMultiplexType multiplexType;
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];
協(xié)議
// 這個更具tag值來點擊視圖判斷點擊視圖
@protocol LXKMeHeaderViewDelegate <NSObject>
@optional
- (void)LXKMeHeaderViewDelegate:(NSUInteger )viewTag;
@end
@interface LXKMeHeaderView : UIView
/**協(xié)議 根據(jù)tag值來判斷點擊的是哪一個*/
@property (nonatomic, weak) id <LXKMeHeaderViewDelegate> delegate;
@end
#pragma mark - action
- (void)avatarImageViewTap:(UITapGestureRecognizer *)sender {
if ([_delegate conformsToProtocol:@protocol(LXKMeHeaderViewDelegate)]) {
[_delegate LXKMeHeaderViewDelegate:[sender view].tag];
}
}