21388


swiftでコードを書いていて、UIPickerViewやらなんらやのdelegate =
selfと書いて、実装メソッド(というのかな？)を現在のクラスに書いているのですが  
Javaで言う所の @Overrideアノテーションのようなことは出来ないのでしょうか。

複数のビューにselfを指定していると、実装しないといけないメソッドが増えていきます。  
javaであれば、実装しないとエラーが出るメソッドは@overrideアノテーションがあるので、後から見ても実装しないといけないから実装したメソッドと、そうじゃない自分で書いたメソッドの区別が出来るようになっています。  
間違えて必要なメソッドを消してしまいエラーが出ることもないです

ところがswiftではそのような書き方が無いように見えます。  
その結果、クラスの中からdelegateだから書いたメソッド、そうじゃないメソッドが混ざってしまい読むのに苦労してしまいます。

Swiftでも、Javaと同じように必要なメソッドをひと目でわかるようにするにはどうしたらよいでしょうか


CC BY-SA 3.0
2016-01-27T09:41:06.437
21382
2016-01-27T10:26:59.173
805
question
ios swift java
swiftでJavaのOverrideアノテーションのような物は無いのか


スーパークラスのメソッドやプロパティをオーバライドするときの`override`修飾子はいやでも強制されるので(Javaのinterfaceに相当する)protocolの実装に関するお話だと思います。(「delegateだから書く」とかいう言い方ではなく「protocolの実装」と書いた方が的確な回答を得られる確率が上がると思いますよ。)

残念ながら現在のSwiftにはそのような属性(attribute,`@objc`や`@IBOutlet`など@で始まるやつ)も修飾子(modifier,`private`とか`final`とか)も存在しません。

Swiftは現在オープンソース化されて、将来のSwiftについては、swift.orgでオープンに議論されていますから(英語を恐れないなら)提案されると良いかもしれません。ただし、Appleのdeveloper
forumsで過去に似たような機能を持つ修飾子の追加が提案されたことがあるのですが、Apple側のSwift開発スタッフからの返答はかなり否定的な感じでした。

Appleのサンプルコードなどを見ても、protocolを実装するためのメソッド定義は一箇所にかためてわかりやすいコメントを書く、といった形でしのいでいるようです。Swift言語がそのような機能を持つまで(Javaでinterfaceの実装に@Overrideを宣言できるようになったのも、アノテーションの登場よりしばらく後だったと思います)は、そういったコーディングスタイルで逃げるしかないだろうと思います。


CC BY-SA 3.0
2016-01-27T10:26:59.173
21388
2016-01-27T10:26:59.173
13972
21382
answer