【问题标题】:How does gesture: works in this example?手势:在这个例子中如何工作?
【发布时间】:2018-02-26 17:52:10
【问题描述】:
let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(actionGesture(gesture: )))
    self.view.addGestureRecognizer(gestureRecognizer)
}

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

通常我们调用函数 actionGesture(gesture: some value )。但是在这个例子中我们只使用了手势:没有值。

【问题讨论】:

  • 因为在这种情况下手势是发送者
  • 你能详细解释一下吗?
  • @John 查看接受的答案here
  • 这不是很好的解释

标签: ios swift


【解决方案1】:

当你调用一个函数时,你可以快速添加参数的值。如果要将函数存储在变量中或将其传递给另一个函数,请使用其全名,其中包括所有外部参数名称(这有助于消除重载之间的歧义,它来自目标 C,其中函数的选择器包括所有参数名称)。为参数添加值没有意义,因为您没有调用该函数,而是引用了该函数本身,以便其他人稍后可以调用它(在您的情况下为手势识别器)。如果您查看任何 swift 函数的苹果文档,您可以了解此命名是如何工作的。例如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

【讨论】:

  • 非常感谢。这个答案的最佳解释。我现在在查看苹果文档时也理解了命名。
猜你喜欢
  • 2021-10-05
  • 2017-11-26
  • 2021-10-14
  • 2021-10-05
  • 1970-01-01
  • 2014-10-22
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多