Swiftk講座の復習のために「@IBAction,@IBOutlet」について調べてみました。
Googleで検索したところ、「Qiita」と「Udemy」のサイトに解りやすく書いてありましたので、参考にさせて戴きました。
@IBAction,@IBOutletとは
Storyboardを使った開発では欠かせない@IBActionや@IBOutletについて。
「Storyboard上のUIとコードを関連付けさせたいときに使うやつ」くらいの認識でしかなかったので、これらがどういう役割を担っているか調べてみました。
IBとは、「Interface Builder」の略であるとXcodの公式ページに書いてありました。
では、「Interface Builder」とは何か?
XcodeのInterface Builderエディタを使うと、コードを異形も書かずに、完全なユーザーインターフェイスを構築でき、ウインドウやボタンをドラッグ&ドロップするだけで、機能的に作成できるとのことです。
@とは、宣言や型に関する補足情報を記述するために用意されたAttribute(属性)と呼ばれる。
@IBOutletと@IBAction以外には、Objective-Cから利用可能である事を示す「@objc」とか「API」が利用できるかどうかを表す「@available」などがあるようです。
Attribute(属性)とは、コンパイラに対し、宣言や型の補足情報を伝達するもので、「属性や修飾子」とも呼ばれる。
Swift5.1の公式リファレンス記載の全27種類
書き方は「@属性名」又は「@属性名(引数)」と書く。
例)
- IBAction
- IBOutlet
- objc
- UIApplicationMain
など
@IBOutletとは、変数の宣言につけられるAttribute(属性)で、変数宣言に直接影響を与えないそうです。
ですが、Interface Builderが、この記述を発見した場合にStoryboardに配置されたUIと関連付けさせることが、できるようInterface Builderが処理してくれると言う事です。
@IBActionとは、関数定義の前につけられるAttribute(属性)で、@IBOutletと同様に直接的にコードに影響を、与えることはないが、関数とStoryboard上のオブジェクトで発生したイベントを関連付けさせたいときに使うAttribute(属性)らしいです。
SwiftUIとは、IosアプリなどのAppleプラットフォームのユーザーインターフェイスを、従来よりも簡単に構築できる「UIフレームワーク」のこと。フレームワークとは、骨組みや骨格のこと。
SwiftUIの種類
View・・・表示するViewの基本型。アプリの構築に原則として必ず使用する。
Text・・・文字表示する。
TextField・・・文字入力する。
SecureField・・・プライベート情報などの文字入力する
Image・・・画像表示
Button・・・通常のButton
PullBasedPopupButton・・・ナヴィゲーション操作をトリガーする。
PresentationButton・・・コンテンツ表示する
Toggle・・・ON/OFFを制御する。
など
import UIKit
//SwiftUI
class ViewController: UIViewController {
//Attribute(属性)@属性 ://Swift UI
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var startButton: UIButton!
@IBOutlet weak var stopButton: UIButton!
var timer = Timer()
var count = Int()
var imageArray = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
stopButton.isEnabled = false
for i in 0..<5{
print(i)
let image = UIImage(named: "\(i)")
imageArray.append(image!)
}
imageView.image = UIImage(named: "0")
}
func startTimer(){
timer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector:
#selector(timerUpdate), userInfo: nil, repeats: true)
}
//Attribute(属性)@属性
@objc func timerUpdate(){
count = count + 1
if count > 4 {
count = 0
}
imageView.image = imageArray[count]
}
//Attribute(属性)@属性
@IBAction func start(_ sender: Any) {
startTimer()
startButton.isEnabled = false
stopButton.isEnabled = true
}
//Attribute(属性)@属性
@IBAction func stop(_ sender: Any) {
startButton.isEnabled = true
stopButton.isEnabled = false
timer.invalidate()
count = 0
}
}
講義の動画を見ながら、何回も復習で写経しても覚えないですし、自分一人でコードを書けないと思います。
調べた方が覚えるかと思いまして、やってみました。
これもアウトプットになるかは疑問ですが、やらないよりは良いかと思います。
今後もこんな様なものを書いていきますので、暇潰のついでに見てやって下さい。
よろしくお願いにます。
PS
メルカリで本や雑貨など、出品していますので、興味があれば覗いてみてくださると嬉しいです。
メルカリのリンクを貼りますので、よろしくお願いにます。