objective-c - Swift References 中的 _ 下划线代表什么?

在 Apple 文档的引用部分中有很多此类事情的实例:

func runAction(_action: SKAction!)

Objective-C 的“等价物”是:

- (void)runAction:(SKAction *)action

让我感到震惊的是,(在 Swift 引用中)下划线后面有一个空格并且“action”用斜体书写可能很重要。

但我不知道这是想表达什么。所以也许问题是......是否有引用中使用的约定的引用?

-- 这是我在此引用中引用下划线使用的页面: https://developer.apple.com/documentation/spritekit/sknode#//apple_ref/occ/instm/SKNode/runAction

更新

Swift 3 对函数/方法参数名称和参数标签的使用和命名方式进行了一些更改。这对这个问题及其答案有影响。 @Rickster 出色地回答了一个关于函数中 _underscores 的不同问题,从而解决了大部分问题,这里:Why do I need underscores in swift?

最佳答案

两个答案都是正确的,但我想澄清一点。

_ 用于modify external parameter name behavior for methods .

在 Local and External Parameter Names for Methods文档的部分,它说:

Swift gives the first parameter name in a method a local parameter name by default, and gives the second and subsequent parameter names both local and external parameter names by default.

另一方面,默认情况下函数没有外部参数名称。

例如,我们在 Bar 类中定义了这个 foo() 方法:

class Bar{
    func foo(s1: String, s2: String) -> String {
        return s1 + s2;
    }
}

当你调用 foo() 时,它的调用方式类似于 bar.foo("Hello", s2: "World")

但是,您可以通过在声明它的 s2 前面使用 _ 来覆盖此行为。

func foo(s1: String, _ s2: String) -> String{
    return s1 + s2;
}

然后,当您调用 foo 时,可以像 bar.foo("Hello", "World") 那样简单地调用它,而无需第二个参数的名称。

回到你的例子,runAction 是一种方法,因为它显然与 SKNode 类型相关联。因此,在参数 action 之前放置 _ 允许您在没有外部名称的情况下调用 runAction

Swift 2.0 更新

函数和方法现在在本地和外部参数名称声明方面以相同的方式工作。

现在默认使用外部参数名称调用函数,从第二个参数开始。此规则仅适用于纯 Swift 代码。

因此,通过在 函数 前面提供 _,调用者不必指定外部参数名称,就像您为 方法。

https://stackoverflow.com/questions/24437388/

相关文章:

objective-c - 为什么在 C 中将 1,000,000,000 写为 1000*1000

ios - UIView 隐藏/显示动画

ios - Objective-C 和 Swift URL 编码

iphone - 从实例中获取类的名称

ios - 如何设置一个简单的委托(delegate)来在两个 View Controller 之间

ios - 如何在 UITableView 中设置分隔符的全宽

ios - iPhone SDK : what is the difference between

ios - 以编程方式在 UIStackView 中添加 View

ios - 无法同时满足约束,将尝试通过打破约束来恢复

objective-c - "FOUNDATION_EXPORT"与 "extern"