方法声明中的 Python 默认值与 Objective-c



对于所有意图和目的,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{

}

最新更新