Vit*_*tek 17 objective-c instanceof
我有以下对象结构:
动物,狗和猫.正如你所料,狗和猫是从动物遗传的.
我有一个农场班:
@implementation AnimalFarm
-(Animal*) createAnimal:(AnimalType)type{
switch (type) {
case CAT:
return [Cat new];
case DOG:
return [Dog new];
default:
return [Animal new];
}
}
@end
Run Code Online (Sandbox Code Playgroud)
我试着进行单元测试:
AnimalFarm *farm = [AnimalFarm new];
Animal *dog = [farm createAnimal:DOG];
Animal *cat = [farm createAnimal:CAT];
STAssertTrue([cat isMemberOfClass:[Cat class]],@"cat is not a cat!");
STAssertTrue([dog isMemberOfClass:[Dog class]],@"Dog is not a dog!");
STAssertTrue([cat isKindOfClass:[Animal class]],@"Cat is not an animal!");
STAssertTrue([dog isKindOfClass:[Animal class]],@"Cat is not an animal!");
Run Code Online (Sandbox Code Playgroud)
课程实施:
@interface Cat : Animal {
}
@end
@implementation Cat
-(NSString*) say{
return @"miau";
}
@end
Run Code Online (Sandbox Code Playgroud)
狗的实施是类似的.
但是,无论是KindOfClass还是isMemberOfClass都没有像我预期的那样工作....
我错过了什么吗?
当我使用IF而不是切换时,一切顺利......但有什么区别?
有效的createAnimal的实现:
-(Animal *) createAnimal:(AnimalType)type {
if (type == DOG) {
return [Dog new];
} else if (type == CAT) {
return [Cat new];
} else {
return [Animal new];
}
Run Code Online (Sandbox Code Playgroud)
dre*_*lax 45
isMemberOfClass:只有YES在实例的类完全相同时isKindOfClass:才会返回,但是YES如果实例的类相同,则返回,或者返回给定类的子类.
例如,这将输出No!:
BOOL result = [[NSMutableArray array] isMemberOfClass:[NSArray class]];
NSLog (@"%@", result? @"Yes!" : @"No!");
Run Code Online (Sandbox Code Playgroud)
但这将输出Yes!:
BOOL result = [[NSMutableArray array] isKindOfClass:[NSArray class]];
NSLog (@"%@", result? @"Yes!" : @"No!");
Run Code Online (Sandbox Code Playgroud)
这是因为NSMutableArray是一种 NSArray,但它不是NSArray类的成员(否则它不会是NSMutableArray).
在整个Foundation和Cocoa中,有许多"类集群".您可以在Apple开发人员网站上的文档中阅读更多相关信息.由于类集群的性质,如果您创建可能是NSString对象,则可能无法通过isMemberOfClass:[NSString class]测试.
如果两者都没有isKindOfClass:或isMemberOfClass:正在返回正确的值,请查看实际对象所在的类
NSLog(@"cat class = %@, dog class = %@", [cat className], [dog className]);
Run Code Online (Sandbox Code Playgroud)
如果这些返回的东西不是他们应该的东西,那么你的农场类就会出现问题.
| 归档时间: |
|
| 查看次数: |
37999 次 |
| 最近记录: |