@objcのwarning@Swift 4の対処

UIRefleshControlを使っているSwift3プロジェクトをSwift4にマイグレーションさせた場合、呼び出しメソッドに@objcが追加されますが、Swift3プロジェクトの設定のま まだとワーニングが表示されます。

ビルドセッティングでSwift3 @objc interfaceをOnからDefaultに変更するとワーニング消えます。

Swift 4で@objcに関するwarningが出たときの対処 - Qiita

なにやらよく分かりませんが、ここを読むとなんとなく雰囲気がわかります。 @objcキーワードはいつまで残るんでしょうか…?

​ #selector がswift4では使えない? → 使えます - MILLEN BOX

ワーニング

The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "NewsReader" target.

マイグレーションされたコード

Xcode3
    override func viewDidLoad() {
        // (中略)
        self.refreshControl = UIRefreshControl()
        self.refreshControl?.addTarget(self, action: #selector(refresh(sender: )), for: .valueChanged)
        // (中略)
    }
    func refresh(sender: UIRefreshControl) {
        print("refresh")
        startDownload()
        self.refreshControl?.endRefreshing()
    }
Xcode4
    @objc func refresh(sender: UIRefreshControl) {
        print("refresh")
        startDownload()
        self.refreshControl?.endRefreshing()
    }