How does gesture: works in this example?

时间:2018-02-26 17:52:10

标签: ios swift

let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(actionGesture(gesture: )))
    self.view.addGestureRecognizer(gestureRecognizer)
}

@objc func actionGesture(gesture: UIPanGestureRecognizer){
....
}

Normally we call functions actionGesture(gesture: some value ). But in this example we just use gesture: no value.

1 个答案:

答案 0 :(得分:2)

在swift中调用函数时,可以添加参数的值。如果要将函数存储在变量中或将其传递给另一个函数,则使用其全名,其中包括所有外部参数名称(这有助于消除重载之间的歧义,它来自目标C,其中函数的选择器包括所有的参数名称)。为参数添加值是没有意义的,因为您没有调用该函数,您正在引用函数本身,以便其他人可以稍后调用它(在您的情况下为手势识别器)。如果你查看任何swift函数的apple文档,你可以看到这个命名是如何工作的。例如tableView(_:cellForRowAt:)。请注意,即使是未命名的参数_也是方法签名的一部分。

这是一个说明要点的游乐场(请注意,使用参数名称可确保我们引用正确的函数):

import PlaygroundSupport
func multiply () {
    print("not implmented")
}
func multiply (_ lhs: Int, by rhs: Int) -> (Int) {
    return lhs * rhs
}

var myfunc = multiply(_:by:)

print(myfunc(2, 3))

输出

6

而不是

not implmented