我试图将 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/