# Swift5.0 No method declared with Objective-C selector 'xxx'

**URL:** <https://www.shiqidu.com/t/topic/589>\
**Category:** 开发调优\
**Tags:** Swift\
**Created:** [2019 年5 月 30 日 07:23 UTC](https://www.shiqidu.com/t/topic/589 "2019-05-30T07:23:11Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![Eureka](https://www.shiqidu.com/user_avatar/www.shiqidu.com/eureka/32/5_2.png) [@Eureka](https://www.shiqidu.com/u/Eureka)\
发布日期： [2019 年5 月 30 日 07:23 UTC](https://www.shiqidu.com/t/topic/589/1 "2019-05-30T07:23:11Z")

</div>

写了一段事件监听的代码如下

```swift
publishBtn.addTarget(self, action: "publishBtnClick", for: .touchUpInside)

```

报了警告如下

```auto
No method declared with Objective-C selector 'publishBtnClick'
Replace '"publishBtnClick"' with 'Selector("publishBtnClick")'

```

意思是没有定义一个OC的selctor，按照官方建议点了Fix之后变成这样

```swift
publishBtn.addTarget(self, action: Selector("publishBtnClick"), for: .touchUpInside)

```

继续报警告，在此点击fix之后变成了这样

```swift
publishBtn.addTarget(self, action: Selector(("publishBtnClick")), for: .touchUpInside)

```

这下不报警告了，但是运行APP之后，点击按钮，直接crash了。。。

以上的三种方法都不管报不报警告，在运行APP后，都不能时间事件监听，都会崩溃。

后来在网上看到这种写法，经测试确实可用。

```swift
publishBtn.addTarget(self, action: #selector(publishBtnClick), for: .touchUpInside)

// 但是要在对应的方法前面加@objc
@objc func publishBtnClick() {
      print(#function)
}

```
