比较两个班级

时间:2015-10-27 05:37:52

标签: ios objective-c class

我正在使用属性isKindOfClass比较两个类,但似乎不起作用。我已经记录了看似相同的输出,但我不明白他们为什么不工作。

UIView *childView = [view subviews][j-1];
NSLog(@"childview class: %@", childView.class);
NSLog(@"childview.class class: %@", [childView.class class]);
NSLog(@"sfidimmer button class: %@", [SFIDimmerButton class]);


if([childView.class isKindOfClass:[SFIDimmerButton class]]){
   NSLog(@"iskindofclass");
   curFrameSize = dimFrameWidth;
}

nslogs的输出:

childview class: SFIDimmerButton

childview.class class: SFIDimmerButton

sfidimmer button class: SFIDimmerButton

如果有条件,控件不会进入内部,你能告诉我原因吗?

4 个答案:

答案 0 :(得分:4)

不要使用Class就像..

K

希望对你有所帮助。

答案 1 :(得分:2)

您的错误

Self.class返回类Object,同时使用isKindOfClass来检查类的实例

您可以使用isKindOfClass检查某个对象是否是该类的实例,如上所述。

文档

  

返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例。

您还可以使用

检查课程
[childView.class isSubclassOfClass:[SFIDimmerButton class]]
  

返回一个布尔值,指示接收类是否是给定类的子类或相同。

答案 2 :(得分:1)

你的支票错了。你应该在对象上调用isKindOfClass:而不是在对象类上。

所以而不是检查

if([childView.class isKindOfClass:[SFIDimmerButton class]]){
    NSLog(@"iskindofclass");
    curFrameSize = dimFrameWidth;
}

试试这个

if([childView isKindOfClass:[SFIDimmerButton class]]){
    NSLog(@"iskindofclass");
    curFrameSize = dimFrameWidth;
}

您也可以使用isMemberOfClass,但大部分时间都要使用isKindOfClass:确保您的代码也适用于子类。

isKindOfClass:如果接收者是指定类的实例或从指定类继承的任何类的实例,则返回YES。

isMemberOfClass:如果接收者是指定类的实例,则返回YES。

答案 3 :(得分:0)

使用id数据类型的任何对象,然后将其与Class类型进行比较。如果满意,则使用Target类键入强制转换。

id childView = [view subviews][j-1];
if ([childView isKindOfClass:[SFIDimmerButton class]]) {

    SFIDimmerButton *btnDimmer = (SFIDimmerButton *)childView;
    // perform your action with derived button..
}

希望,它会帮助你。
谢谢。