Swift2にしたら「Method does not override any method from its superclass」が出てよくわからん

スポンサーリンク

Xcode6.4(Swift1.2)の環境から、Xcode7(Swift2)の環境にしたところ、オーバーライドしていたメソッドがエラーを出すようになってしまいました。

Method does not override any method from its superclass

「!」をつけなきゃならなくなったとかが大量に出たりする件については、大変だけどなんとかがんばってそれなりに修正しようという気にもなりますが、エラーメッセージとして、こういうのだけが出てるのはほんとややこしい。つか、よくわからん。

01

このエラーメッセージは、メソッドそのものに変更があったわけではなく、引数の型がオプショナルに変更された場合でもこんなエラーメッセージになるようです。Swift2での変更では、このような引数の型変更が結構あるようなので、このエラーに遭遇する人も多いんじゃないかと思います。

[Swift] シェイクジェスチャーでビューを閉じる」であげたコードが同じエラーメッセージを出してましたので修正してみます。(当然ながらさまざまな原因がある中、そのひとつの例として考えてください。)

こういう場合は、もう一度、「motionE〜」と書き込んで、Xcodeに自動的にメソッドを書かせるといいです。引数に型変更があったことなんか知らなくても、書き込んでくれるので、そこでユーザとしては気がつく、というのが普通の流れがではないかと思います。

この場合、最後の「UIEvent」に「?」をつけるだけでエラーを回避することができるようになりました。

この修正の様子を録画しておきましたので、動画でも見てみてください。

「Method does not override any method from its superclass」の回避例 from mushikago on Vimeo.