Swift3.0でoverrideでエラーが出た時


Xcode8betaにしてからエラーが増えた中で一つ解決に手間取ったものがあった。(日本語の記事が見つからなかったから

問題

UIViewControllerでステータスバーのスタイルを変えたいときなどは、

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .default
}

を使っていたと思うが、Xcode8betaを使ってプロジェクトを開くと

Method does not override any method from its superclass

エラーが出る。

理由

なぜならUIViewController内での定義が

public func preferredStatusBarStyle() -> UIStatusBarStyle

から

open var preferredStatusBarStyle: UIStatusBarStyle { get } 

に変わったから。

修正方法

Swift3.0からはこう書く。

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

他にも

他にも、
prefersStatusBarHidden
shouldAutorotate
supportedInterfaceOrientations
等で変わっている。

まとめ

何れにしても、funcをvarに書き換え、() ->を:に書き換えるだけなので、それがわかれば簡単。
エラーが出て定義を確認した時に

open var なんとか: なんとか { get }

だったら応用が利く。

コメント

今久しぶりにXcode8を使って、それがたまたまbeta4で気づいたことだったが、もしかしたら前からだったのかもしれない。

追記(8/16)

Xcode8_beta6でまた定義が変わったみたいです。それに合わせて編集しました。
publicからopenになりました。openが何か全くわかりません。アクセス修飾子っていうんですか?これ。
openについてはここ->http://qiita.com/hironytic/items/6cc68ca93b428ba9194e

参考サイト