对于所有意图和目的,Objective-C 方法声明是 只是一个 C 函数,它预置了两个附加参数(请参阅 Objective-C 运行时编程指南中的"消息传递")。 因此,Objective-C 方法声明的结构不同于使用命名或关键字参数的方法的结构。 在像 Python 这样的语言中,如下面的 Python 示例 说明: 在此 Python 示例中,Thing 和 NeatMode 可能会被省略,或者在调用时可能具有不同的值。
def func(a, b, NeatMode=SuperNeat, Thing=DefaultThing):
pass
在与Objective-c相关的书籍中展示这个例子的目的是什么?
这是一个(糟糕的)例子,说明Objective-C不支持其他语言(例如Python)可能支持的某些功能。文本解释说,虽然Objective-C具有格式的"命名参数"
- (void)myMethodWithArgument:(NSObject *)argument andArgument:(NSObject *)another;
这些参数不支持默认值,而 Python 支持。
提到在 Objective-C 中预置两个参数暗示了消息传递如何在后台工作,即在每个方法前面加上一个接收器对象和一个选择器。你不需要知道这个细节就可以用Objective-C编写代码,特别是在初学者级别,但Apple在这里解释了这个过程。
def func(a, b, NeatMode=SuperNeat, Thing=DefaultThing):
pass
整洁模式、事物是可选的命名参数在目标C中,它们是
- (void) func:(int)a :(int)b NeatMode:(object*)SuperNeat Thing:(object*)DefaultThing
请阅读有关此主题的更多信息http://www.diveintopython.net/power_of_introspection/optional_arguments.html
我认为这里的重点是区分你如何"使用"在函数中接收参数和 objective-c 如何做。通常:
public void accumulate(double value, double value1) {
}
在 objective-c 中:
-(void)accumulateDouble:(double)aDouble withAnotherDouble:(double)anotherDouble{
}