代码改变世界

ReactiveCocoa 监听枚举类型enumerate 或者 NSInteger类型

2018-12-20 22:15  菜鸟Alex  阅读(552)  评论(0编辑  收藏  举报
  • 因为刚用RAC库, 不知如何通过signals监听枚举类型UIKtyboardType然后求助强大的Stack Overflow终于两个小时后一位国际友人回答了这个问题,经过测试正确感谢.

  • 代码如下.h文件

#import <UIKit/UIKit.h>
@interface XBXMLoginTextField : UIView
@property (nonatomic, assign) UIKeyboardType keyboardType;
@end
  • .m文件
- (instancetype)init {
    if (self = [super init]) {

        [RACObserve(self, keyboardType) subscribeNext:^(UIKeyboardType x) {

        }];
    }
    return self;
}
  • 这种做法编译都通不过报错Incompatible block pointer types sending 'void (^)(UIKeyboardType)' to parameter of type 'void (^ _Nonnull)(id _Nullable __strong)'

  • 正确做法如下:

  • 国际友人的意思大概是: 你得用RAC自己特有的监听数据类型的NSNumber类型,然后自己转换成integer类型才可以.感谢danielhadar

[RACObserve(self, keyboardType) subscribeNext:^(NSNumber *keyboardType) {
    NSLog(@"%ld", (long)keyboardType.integerValue);

    // Or any other user of keyboardType.integerValue, such as:
    if (keyboardType.integerValue == UIKeyboardTypeURL) {
        // Do stuff.
    }
}];
  • 截图:

原文链接