20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

ふわっとした理解が結構深まった気がします。

参考文献

20
15
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?