objective-c中实现函数重载(黑魔法:__attribute__((overloadable)))

总所周知,oc中不像java,c++一样可以实现函数重载。

- (void)test:(float)value {}

- (void)test:(int)value {}

这样xocde会报错。

所以有时候如果我们想要实现一下函数重载就要混编,或者是通过一下的方法:

1.如果参数是对象的话:

- (void)test:(id)value {

if ([value isKindOfClass:[NSString class]]) {

NSLog(@"NSString");

}

else if ([value isKindOfClass:[NSDictionary class]]) {

NSLog(@"NSDictionary");

}

else if ([value isKindOfClass:[NSArray class]]) {

NSLog(@"NSArray");

}

else {

NSLog(@"摩擦摩擦");

}

}

2.如果参数是基本类型的话,很可能就会这样了:

- (void)testInt:(int)value {

NSLog(@"int");

}

- (void)testFloat:(double)value {

NSLog(@"double");

}

- (void)testLong:(long)value {

NSLog(@"long");

}

虽然我们可以有很多方法达到我们的最终目的,但是能否找到更加优雅的方式解决问题。

现在我们来介绍下黑魔法:

__attribute__((overloadable))

然后简单写了一个demo,一看就明白它是怎么用的了

@interface ViewController ()

@end

NSString * __attribute__((overloadable)) mytest(NSString *x) {return @"aa";}

NSString * __attribute__((overloadable)) mytest(NSNumber *x) {return @"bb";}

NSString * __attribute__((overloadable)) mytest(NSDictionary *x) {return @"cc";}

NSString * __attribute__((overloadable)) mytest(int x) { return @"int"; }

NSString * __attribute__((overloadable)) mytest(double x) { return @"double"; }

NSString * __attribute__((overloadable)) mytest(long x) { return @"long"; }

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

NSLog(@"%@", mytest(133333333));

}

@end

很简单是吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,883评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,614评论 0 7
  • 1、改变 UITextField 占位文字 颜色和去掉底部白框 [_userName setValue:[UICo...
    i_MT阅读 4,719评论 0 2
  • 接下来我们看base文件下的Foundation文件夹下文件 Base - Foundation 这个文件夹里面的...
    充满活力的早晨阅读 6,577评论 0 1
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 5,234评论 0 3

友情链接更多精彩内容