0

出于所有意图和目的,Objective-C 方法声明只是一个附加两个附加参数的 C 函数(请参阅 Objective-C 运行时编程指南中的“消息传递”)。因此,Objective-C 方法声明的结构不同于在 Python 等语言中使用命名参数或关键字参数的方法的结构,如下面的 Python 示例所示: 在此 Python 示例中,Thing 和 NeatMode 可能会被省略或可能调用时有不同的值。

def func(a, b, NeatMode=SuperNeat, Thing=DefaultThing):
    pass

在 Objective-c 相关书籍上展示这个例子的目的是什么?

4

3 回答 3

1

这是 Objective-C 如何不支持其他语言(例如 Python)可能支持的某些功能的(差)示例。文本解释说,虽然 Objective-C 具有格式的“命名参数”

- (void)myMethodWithArgument:(NSObject *)argument andArgument:(NSObject *)another;

这些参数不支持默认值,Python 支持。

前面提到的添加两个参数暗示了 Objective-C 中的消息传递是如何在幕后工作的,即通过在每个方法前面添加一个接收器对象和一个选择器。用 Objective-C 编写代码不需要了解这些细节,尤其是初学者,但 Apple在这里解释了这个过程。

于 2012-06-06T11:39:50.883 回答
0
def func(a, b, NeatMode=SuperNeat, Thing=DefaultThing):
    pass

NeatMode, Thing 是目标 c 中的可选命名参数,它们将是

- (void) func:(int)a :(int)b NeatMode:(object*)SuperNeat Thing:(object*)DefaultThing

请阅读有关此主题的更多信息 http://www.diveintopython.net/power_of_introspection/optional_arguments.html

于 2012-06-06T11:36:04.927 回答
0

我认为这里的重点是区分你如何“习惯”接收函数中的参数和objective-c是如何做的。一般:

public void accumulate(double value, double value1) {                                    

}

在objective-c中:

-(void)accumulateDouble:(double)aDouble withAnotherDouble:(double)anotherDouble{


}
于 2012-06-06T11:37:27.340 回答