ios - : works in this example? 手势如何

标签 ios swift

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

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

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

最佳答案

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

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

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

而不是

未实现

关于ios - : works in this example? 手势如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994285/

相关文章:

android - 如何在 sencha touch 中为不同的屏幕分辨率添加图像?

ios - 在执行使用对 self 的强引用的 block 时更改 self 的 @property 值

ios - 大于 Unsigned Long Long

swift - NSView 未被释放

ios - 将 Obj-C 函数完成处理程序代码转换为 Swift 2.0 时出错

cocoa - needsDisplay 触发无限 drawRect 循环

ios - 当我使用快速代码触摸搜索栏外部时如何关闭键盘

objective-c - iOS 中的 PDF 包

ios - Swift 中的警告 : Attempt to present ---- whose view is not in the window hierarchy! 和一个变量未传输

xcode - 字符串中插入符号 ^ 的 NSURL 错误