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

如何避免在iOS 11中使用带刷新控件的@objc和Swift 4?,ios,ios11,swift4,uirefreshcontrol,Ios,Ios11,Swift4,Uirefreshcontrol,我将我的项目从Swift 3升级到Swift 4,在迁移过程中,它在我的代码中插入了一堆“@objc”注释。我希望去掉它们,以避免生成任何Objective-C入口点。我不知道如何摆脱的一个问题是使用刷新控件。以下是违规代码: let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(MyController.handleRefresh(refreshControl:)), f

我将我的项目从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
是Objective-C特性,因此您必须显式地将操作方法公开给Objective-C(以前您已经隐式公开了它;现在您必须说出您的意思)

我希望摆脱他们


你不能这样做,你需要停止这样做
#selector
是Objective-C特性,因此您必须显式地向Objective-C公开操作方法(以前您已经隐式公开了它;现在您必须说出您的意思)。

您可以使用
@iAction
而不是
@objc

两者都使用反射,但Swift4对
@IBAction

没有问题。您可以使用
@IBAction
而不是
@objc

两者都使用反射,但Swift4在
@iAction

方面没有问题。您可以尝试使用类型别名吗?为了避免生成任何Objective-C入口点,为什么这对您很重要?@Caleb我的主要原因是我想编写干净、漂亮的Swift-4代码,其中没有Objective-C,而objc的东西很难看。我的第二个原因显然是,“生成所有这些Objective-C入口点的成本很高”(),这是一个很好的问题。我自己也在想同样的事情。显然,Swift 4并不打算让我们使用
@objc
注释。它旨在与早期项目向后兼容。我想
@objc
注释最终可能会被弃用。你有没有想过如何在没有选择器的情况下实现刷新控件?(也许这还不是苹果公司已经解决的问题,所以也许我们现在必须使用注释;不确定。)是的,我更仔细地研究了一下,基本上苹果公司似乎还没有更新所有的API。我希望在2018年WWDC大会上看到这方面的很多改进。您可以尝试使用类型别名吗?为了避免生成任何Objective-C入口点,为什么这对您很重要?@Caleb我的主要原因是我想编写干净、漂亮的Swift-4代码,其中没有Objective-C,而objc的东西很难看。我的第二个原因显然是,“生成所有这些Objective-C入口点的成本很高”(),这是一个很好的问题。我自己也在想同样的事情。显然,Swift 4并不打算让我们使用
@objc
注释。它旨在与早期项目向后兼容。我想
@objc
注释最终可能会被弃用。你有没有想过如何在没有选择器的情况下实现刷新控件?(也许这还不是苹果公司已经解决的问题,所以也许我们现在必须使用注释;不确定。)是的,我更仔细地研究了一下,基本上苹果公司似乎还没有更新所有的API。我希望在2018年世界野生动植物保护大会上看到这方面的许多改进。