Control flow / Conditional statements / switch/case statements

@interface Tiger : NSObject
@end

@implementation Tiger
@end

//runtime type checks
NSString *describe(id obj) {
    if (obj == nil) {
        return @"Empty value";
    }
    if ([obj isKindOfClass:[Tiger class]]) {
        return @"Tiger!!!";
    }
    if ([obj isKindOfClass:[NSNumber class]]) {
        return @"Number type";
    }
    if ([obj isKindOfClass:[NSString class]]) {
        return [NSString stringWithFormat:
            @"string value '%@'", obj];
    }
    return @"Unknown type";
}

NSString *result = describe([Tiger new]);
//result is "Tiger!!!"

result = describe(@"test");
//result is "string value 'test'"

result = describe(@5);
//result is "Number type"