需要解释双标签功能声明

时间:2017-03-17 09:42:00

标签: swift

当我看到这段语法时,我正在阅读苹果文档:

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// Prints "The point is now at (3.0, 4.0)"

有人可以解释为什么moveBy(x deltaX: Double, y deltaY: Double)在参数上有双重标签吗?

3 个答案:

答案 0 :(得分:2)

第一个标签是 参数标签 第二个标签是 参数名称

来自Apple文档

  

每个函数参数都有参数标签和参数   名称。调用函数时使用参数标签;每   参数在函数调用中用其参数标签写入   在它之前。参数名称用于执行   功能。默认情况下,参数使用其参数名称作为其参数   论证标签。

<强>用法

func foo(with hoge: Int) {
    return hoge * 2
}


let A = foo(with: 2) // A = 4;

答案 1 :(得分:2)

简答:第一个参数标签用于外部呼叫者,第二个用于本地方法使用。

调用后的

func moveBy(x deltaX: Double, y deltaY: Double)moveBy(x: 1, y: 1),但在方法deltaXdeltaY标签内使用。

此命名样式不是必需的,您可以声明方法func moveBy(x: Double, y: Double),以便在方法中使用xy

要支持旧版样式,因此从调用者范围开始,您的方法看起来像moveBy(1, 1),您应该将_作为第一个参数标签:func moveBy(_ deltaX: Double, _ deltaY: Double)。此类声明在CocoaTouch中用于支持传统的obj-c接口(例如func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool)。

答案 2 :(得分:1)

仔细查看Apple documentation。它与参数名称相关联。

  

您可以使用其中一个覆盖参数标签的默认行为   以下形式:

参数标签参数名称:参数类型

_参数名称:参数类型