如何避免在 iOS 11 和 Swift 4 中使用带有刷新控件的@objc?

How to avoid using @objc with a refresh control in iOS 11 with Swift 4?

我将我的项目从 Swift 3 升级到 Swift 4,在迁移过程中它在我的代码中插入了一堆“@objc”注释。我希望摆脱它们以避免生成任何 Objective-C 入口点。我不知道如何摆脱的其中一个是使用刷新控件。这是有问题的代码:

let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(MyController.handleRefresh(refreshControl:)), for: .valueChanged)
self.table.refreshControl = refreshControl;

问题似乎出在#selector 的使用上。如何在没有选择器的情况下实现我的刷新控件?

I wish to get rid of them

你不能,你需要停止想要。 #selector 一个 Objective-C 功能,因此您 必须 显式地将操作方法​​公开给 Objective-C。 (以前你已经隐含地暴露了它;现在你必须说出你的意思。)

您可以使用 @IBAction 而不是 @objc 两者都使用反射,但 Swift4 对 @IBAction

没有问题