选择器找不到实例方法

Selector can't find instance method

我正在尝试在我的视图控制器中将方法注册为 UISwipeGestureRecognizer 的操作。目标视图是我使用 UIView 子类构建的自定义视图,因为这是我希望滑动的目标位置。我遇到的问题是我不知道如何将操作设置为 UIViewController 中的方法。当我 drag/drop 在 Interface Builder 中向 View 做手势,然后将一个动作拖到控制器时,我可以做到这一点。

func swiped(_ sender: UISwipeGestureRecognizer) {
}

func addGestureToView(_ view: CardView) {
    let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:"))
    gesture.direction = .up
    view.addGestureRecognizer(gesture)
}

我也试过

let gesture = UISwipeGestureRecognizer(target: view, action: #selector(swiped(_:)))

这两种方法都给我以下异常:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[testapp.CardView swiped:]: unrecognized selector sent to instance

我假设这是因为它正在 CardView 目标中寻找 swiped:,而不是控制器中存在的方法。如何指定我希望它使用控制器来执行操作,同时将手势本身 应用于 CardView?

更改此行:

let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:"))

至:

let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped(_:)))

说明

target: 在 UISwipeGestureRecognizer 中定义了你的操作方法将被调用的地方,通过定义 self 我们告诉我们滑动手势操作应该从 UIViewcontroller 调用而不是从 CardView

action: 在 UISwipeGestureRecognizer 中定义了应该在滑动手势上调用的方法。