2017-09-24 57 views
1

当更新项目代码到swift 4得到一些错误的add.target方法 我该如何解决这个错误?如何更新addTarget方法swift 4

//swift3 

var chatLogController: ChatLogController? { 
    didSet { 
     sendButton.addTarget(chatLogController, action: #selector(ChatLogController.handleSend), for: .touchUpInside) 

     uploadImageView.addGestureRecognizer(UITapGestureRecognizer(target: chatLogController, action: #selector(ChatLogController.handleUploadTap))) 
    } 
} 
+0

“得到一些错误”获取_what_错误? – matt

+0

这个错误“#selector'的参数是指实例方法'handleSend()'没有公开到Objective-C” –

+1

那么你的答案。只要阅读错误信息说的是什么!把'@ objc'放在'func handleSend ...'前面(你甚至没有在你的问题中显示,看在上帝的份上)。 – matt

回答

5

提示信息告诉你该怎么做,在声明你的函数之前添加@obj

@objc func handleSend(_ sender: UIGestureRecognizer){ 
    ... 
} 

的原因是因为:

在Objective-C,选择器是指 Objective-C的方法的名称的类型。在Swift中,Objective-C选择器由 ,Selector结构表示,并且可以使用#selector 表达式构造。要为可以从 Objective-C调用的方法创建选择器,请传递方法的名称,例如 #selector(MyViewController.tappedButton(_:))。要为属性的Objective-C getter或setter方法构造选择器,请传递 属性名称,前缀为getter:setter:标签,例如 #selector(getter: MyViewController.myButton)

查看更多here,在苹果文档。

+0

对于刚开始使用Swift编码的人来说,这是一个很好的答案。人们应该像这样越来越少的批评回答:) –

+0

@RoiMulia,谢谢。 –

+0

@HabibAlejalil,哪个错误,你使用Swift 4? –