ner*_*k99 3 overloading objective-c
在Java中,您可以将多个构造函数放入一个被调用的类中,这取决于构造实例时使用的参数的类型和/或数量.我假设在Objective C中有等价物.
我可以使用多态方法吗?
我想构建一个方法,根据字符串是传递还是双精度,行为略有不同?
这听起来有点疯狂吗?还是容易?
您正在考虑重载方法.由于在Objective-C中实现动态分派的方式,目前无法将两个不相关的类型作为参数传递给相同(或同名)的方法并使其理解.
在Objective-C中,有两种相关但不同的方法来处理多种输入.让我们使用你的字符串或双精度输入的例子.在Java中,您可能有:
void applyWidget(String s);
void applyWidget(double d);
Run Code Online (Sandbox Code Playgroud)
这很棒,但不是Objective-C.在Objective-C中,您将使用两个不同的方法名称:
- (void)applyWidgetWithName: (NSString *)name;
- (void)applyWidgetWithValue: (double)value;
Run Code Online (Sandbox Code Playgroud)
每个方法中的逻辑与Java版本中的逻辑相同,但是不同的名称允许编译器将它们视为不同的方法(即使在Java中也是如此).代码也变为自我记录:通过阅读它,您得到一个即使没有评论也会发生什么.或者,如果您只需要一个方法名称,则将参数类型更改为id并接受任何对象:
- (void)applyWidget: (id)widget;
Run Code Online (Sandbox Code Playgroud)
然后通过NSString或NSNumber包裹你的double.然后,在该方法的实现中,使用Objective-C的内省方法来确定如何继续:
if ([widget isKindOfClass: [NSString class]]) {
...
} else if ([widget isKindOfClass: [NSNumber class]]) {
double d = [widget doubleValue];
...
}
Run Code Online (Sandbox Code Playgroud)
这种方法基本上告诉呼叫者"发送任何东西 - 我会妥善处理它".没有大量文档,很难确定这种方法的行为.
| 归档时间: |
|
| 查看次数: |
3572 次 |
| 最近记录: |