objective-c - 是否有一个 native 函数可以检查某个值是否在枚举内部?

标签 objective-c enums

我试图将 UILabel 放入 NSDictionary 中,我使用标签作为键,但问题是,并非所有标签都在 NSDictionary 中需要 View ,所需的 UILabel 的标签也在枚举内部。

所以我想做的是,检查标签是否存在于枚举内部,然后将其添加到以标签作为键的字典中。

for (NSObject *obj in [self.formView subviews]) {

    if ([obj isKindOfClass:[UILabel class]]) {
        UILabel *label = (UILabel *)obj;

        // Here is where I want to add the check before I do this line
        labelDict[[NSString stringWithFormat:@"%d",label.tag]] = label;
    }
}

对于 future 的读者:

如果您还像上面的代码一样迭代 NSArray 类型的对象,则应该使用 NSArray 函数 enumerateObjectsUsingBlock 来代替,这就是答案,不它看起来更漂亮:

[self.formView.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isKindOfClass:[UILabel class]]) {
            UILabel *label = (UILabel *)obj;
            if ( label.tag >= TEXTFIELDTYPE_MIN_VAL && label.tag <= TEXTFIELDTYPE_MAX_VAL ) {
                labelDict[[NSString stringWithFormat:@"%d",label.tag]] = label;
            }
        }
}]; 

最佳答案

Objective-C 枚举继承自 C 枚举,无法在运行时反射(reflect)。如果不滥用调试符号(这将是一项过于复杂的任务,导致缓慢且不可靠的结果),我相信不可能想出一个函数来告诉您任意值是否是任意枚举的成员。

一种可能的解决方法是创建一个包含您拥有的所有枚举值的 NSSet,并检查您的标签的标记是否存在于该集合中。否则,如果您的枚举是连续的,您可以检查标记是否位于枚举的最小值和最大值之间。

关于objective-c - 是否有一个 native 函数可以检查某个值是否在枚举内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23948477/

相关文章:

iphone - iPhone 上的访问崩溃日志数据

objective-c - 当我们从 UIWebView 向下滚动时如何触发一个方法?

java - Android 性能 : Strings vs. 枚举与静态最终整数

javascript - redux(?) 请求的 $$typeof 属性缺失

java - 在 Java 中跨多个类使用枚举

html - iOS中如何获取href标签中的数据?

objective-c - typedef 枚举类型作为 NSDictionary 的键?

objective-c - 我可以使用系统错误代码作为用户定义的错误代码吗

java - 遍历 java 中枚举的子集

generics - 如何实现为通用枚举实现通用特征的过程宏?