Storyboardを使った開発では欠かせない@IBAction
や@IBOutlet
。
「Storyboard上のUIとコードを関連付けさせたいときに使うやつ」くらいの認識でしかなかったので、これらがどういう役割を担っているか調べてみました。
Interface Builderとは
まず、これらについて理解するためにはInterface Builder(IB)についての理解が必要です。
Interface Builderとは公式ドキュメントによると
XcodeのInterface Builderエディタを使用すると、コードを1行も記述することなく完全なユーザーインターフェイスを構築できます。ウインドウ、ボタン、テキストフィールド、その他のオブジェクトをデザインキャンバスにドラッグしてドロップするだけで、機能的なユーザーインターフェイスを作成できます。
ということで、コードを書かずにUIを構築することが出来るXcode内蔵のツールのことを指すらしいです。そしてそのInterface Builderの機能として提供されているのが、Storyboard, Assitant, Auto Layout, Previewらしいです。
@IBAction,@IBOutletとは
一つ前の章ではIBがInterface Builderの略であるということが分かりました。それではこれらが何を表すかについて調べていきます。
そもそも@とは
公式ドキュメントによると、
An attribute provides additional information about the declaration or type.
宣言や型に関する補足情報を記述するために用意されたアトリビュート(attribute)と呼ばれる概念らしいです。(属性・修飾子とも呼ばれる)@IBOutlet, @IBAction以外にはObjective-Cから利用可能であることを表す@objc
とかAPIが利用できるかどうかを表す@available
などがあるみたいです。(ここにいっぱい載ってます)
@IBOutletとは
@IBOutletは変数の宣言に付けられるAttributeで、変数宣言に直接影響を与えることは無いみたいです。しかし、Interface Builderがこの記述を発見した場合にStoryboardに配置されたUIと関連付けることさせることが出来るようInterface Builderが処理してくれるみたいです。
@IBActionとは
@IBActionは関数の定義の前に付けられるAttributeで、@IBOutletと同様に直接的にコードに影響を与えることはありません。関数とStoryboard上のオブジェクトで発生したイベントを関連付けさせたいときに使うAttributeらしいです。
まとめ
調べた結果これら事がわかりました。
- IBはInterface Builderの略でXcodeが提供しているノーコードでUIが構築できるツールのことを指す。
- @はSwiftのAttributeという機能で、宣言や型に関する補足情報を伝えるための構文
-
@IBOutlet
はStoryboard上のオブジェクトにプログラムからアクセスするために利用される変数につけるAttribute -
@IBAction
はユーザーがUIに対して行うアクションを関連付けるために利用する関数につけるAttribute
ふわっとした理解が結構深まった気がします。