【发布时间】:2014-11-18 05:14:09
【问题描述】:
说我有一些像这样的objective-C:
- (void) foo:(double)doubleVal;
有没有办法让下面的代码编译失败:
int integerVal;
[self foo:integerVal];
当这段代码成功时:
double doubleVal;
[self foo:doubleVal];
?
理想情况下,我只能对 foo 执行此操作,而不是全局执行此操作。
提前致谢, 猎户座
【问题讨论】:
-
很好奇,你为什么希望它失败?
double可以处理任何int值。 -
好问。这是因为我做了一个重构,它不仅改变了这个参数的类型,还改变了预期的范围。特别是作为 int 的范围是 0 - 255,作为 double 范围是 0.0 - 1.0。我有一堆代码需要转换为匹配,如果让编译器为我找出所有用例,那就太好了。
-
通过这种重构,我会保留旧方法,然后创建一个名称稍有不同的新方法。新的采用
double,旧的采用int。这可以防止任何现有代码被破坏。现在您可以根据需要更改代码以使用新方法(和新范围)。您甚至可以不理会所有旧代码,将旧方法更改为在将int转换为新的double范围后调用新方法。
标签: objective-c type-promotion