将目标添加到属于不同对象的选择器

Adding a target to a selector belonging to a different object

我有一个像这样的 UIViewController:

import UIKit
import WebKit

class ViewController: UIViewController {

  var webView: WKWebView?
  var backButton: UIButton?

  override func loadView() {
    self.webView = WKWebView()

    self.backButton = UIButton(type: .system)
    self.backButton?.addTarget(self.webView, action: #selector(goBack), for: .touchUpInside)
  }
}

此代码尝试将点击后退按钮连接到 WKWebViewgoBack() 实例方法。请注意,我已将 self.webView 传递给按钮的 addTarget() 调用。

这会导致编译错误:"Use of unresolved identifier 'goBack'"。我认为 Swift 编译器能够将 goBack() 解析为 WKWebKit 实例。

我可以让它编译的唯一方法是传入 self 并手动转发 goBack() 调用:

override func loadView() {
    self.webView = WKWebView()

    self.backButton = UIButton(type: .system)
    self.backButton?.addTarget(self, action: #selector(goBack), for: .touchUpInside)
  }

func goBack() {
  self.webView?.goBack()
}

我是不是遗漏了什么明显的东西?

您可以限定您的选择器:

#selector(self.webView.goBack)