web-dev-qa-db-ja.com

addTargetメソッドをSwift 4に更新する方法

プロジェクトコードをSwift 4に更新すると、add.targetメソッドでエラーが発生します。このエラーを修正するにはどうすればよいですか?

 //Swift3

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

       uploadImageView.addGestureRecognizer(UITapGestureRecognizer(target: chatLogController, action: #selector(ChatLogController.handleUploadTap)))
    }
}
3
Habib Alejalil

ヒントメッセージは、何をすべきかを示しています。関数を宣言する前に_@obj_を追加してください。

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

理由は次のとおりです。

Objective-Cでは、セレクターはObjective-Cメソッドの名前を参照するタイプです。 Swiftでは、Objective-CセレクターはSelector構造体で表され、_#selector_式を使用して構築できます。 Objective-Cから呼び出すことができるメソッドのセレクターを作成するには、#selector(MyViewController.tappedButton(_:))などのメソッドの名前を渡します。プロパティのObjective-Cゲッターまたはセッターメソッドのセレクターを作成するには、#selector(getter: MyViewController.myButton)などの_getter:_または_setter:_ラベルのプレフィックスが付いたプロパティ名を渡します。

続きを読む ここ 、Appleのドキュメントをご覧ください。

9
Rashwan L