Ios 斯威夫特:“我的名字叫什么?”;已将无法识别的选择器发送到实例";尝试使用点击手势时出错

Ios 斯威夫特:“我的名字叫什么?”;已将无法识别的选择器发送到实例";尝试使用点击手势时出错,ios,swift,error-handling,uigesturerecognizer,Ios,Swift,Error Handling,Uigesturerecognizer,我得到的错误 ***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[app.DetailController tap]:未识别的选择器已发送到实例0x109803800” 我的名为“DetailController”的视图控制器有一个小的图像视图,当用户单击图像时,我希望图像放大到全屏,然后再次单击以返回到全屏之前的默认图像大小 问题是我的应用程序在单击imageView时崩溃 ViewDidLoad override func viewDid

我得到的错误

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[app.DetailController tap]:未识别的选择器已发送到实例0x109803800”

我的名为“DetailController”的视图控制器有一个小的图像视图,当用户单击图像时,我希望图像放大到全屏,然后再次单击以返回到全屏之前的默认图像大小

问题是我的应用程序在单击imageView时崩溃

ViewDidLoad

override func viewDidLoad() {
    super.viewDidLoad()

    iconImage.isUserInteractionEnabled = true
    let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tap")))
    iconImage.addGestureRecognizer(tapGesture)
}

func tap() {

    let screenSize: CGRect = UIScreen.main.bounds
    let screenWidth = screenSize.width
    let screenHeight = screenSize.height
    iconImage.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)
}
不要使用
选择器()
。使用
#选择器()
表单。编译器能够检查与该表单匹配的方法

对于手势识别器,选择器应具有1个参数:手势识别器本身:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tap(_:)))
你的函数是这样的

@IBAction func tap(_ gesutureRecognizer: UITapGestureRecognizer) {
}

对于
UIViewController
函数,您不应该在函数上使用
@objc
限定符,因为
UIViewController
是Objective-C对象。

函数上的@objc限定符是什么?我使用iAction,但只是为了学习,它告诉编译器应该使用Objective-C消息传递来设置函数。选择器需要它,但继承自
NSObject
的对象(如
UIViewController
)已经使用Objective-C消息传递设置了它们的方法。