当我看到这段语法时,我正在阅读苹果文档:
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)
在参数上有双重标签吗?
答案 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)
,但在方法deltaX
和deltaY
标签内使用。
此命名样式不是必需的,您可以声明方法func moveBy(x: Double, y: Double)
,以便在方法中使用x
和y
。
要支持旧版样式,因此从调用者范围开始,您的方法看起来像moveBy(1, 1)
,您应该将_
作为第一个参数标签:func moveBy(_ deltaX: Double, _ deltaY: Double)
。此类声明在CocoaTouch中用于支持传统的obj-c接口(例如func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
)。
答案 2 :(得分:1)