无法识别的选择器发送到实例 - XCode 9.4.1,Swift 4.0

unrecognized selector sent to instance - XCode 9.4.1, Swift 4.0

我正在学习 Stanford Swift Course iOS9 from 2016 并且在复制 UIPinchGestureRecognizer 时遇到问题,对 Selector 代码语法感到非常困惑。

在 Class 中的 FaceViewController 中 FaceViewConroller.Swift:

@IBOutlet weak var faceView: FaceView! {
    didSet {
        faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: self, action: #selector(changeScale(_:))))
        updateUI()
    }
}

Class 中 FaceView.Swift 中 Faceview 的定义:

@objc
func changeScale(_ recognizer: UIPinchGestureRecognizer) {
    switch recognizer.state {
    case .changed,.ended:
        scale *= recognizer.scale
        recognizer.scale = 1.0
    default:
        break
    }
}

它构建没有错误(花了一段时间)但是当它运行时捏合手势导致错误:

Faceit.FaceViewController changeScale:]: unrecognized selector sent to instance

谢谢。

您传递了错误的 target 参数。

由于您要调用的方法 (changeScale) 是在 FaceView 中声明的,目标应该是 FaceView 的实例,而不是 FaceViewController,因为 FaceViewController 没有 changeScale 方法。

所以:

faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(changeScale(_:))))