1. コードを接続した際に自動的に追加されたコードを一つずつ紐解く
ViewController.swift
// ---(略)---
@IBOutlet weak var label: UILabel!
// ---(略)---
1-1. @IBOutlet
@IBOutlet
は、変数labelがプロパティとしてストーリーボードと接続できることを表している。
1-2. weak
weak
は、メモリ管理の設定。
1-3. var label
var label
は、varキーワードを用いて、変数labelを宣言している。
1-4. 「:」の後のUILabel
「:」の後のUILabel
は、変数labelの型がUILabelクラスであることを表す。
1-5. !
キーワードは「オプショナル」。2. につづく。
2. オプショナル整数型(= nilを取り得る整数型)について
2-1. オプショナル整数型とは?
nilを変数に代入する場合は、下記のように型を明示することが必要。そして、型の後に「?」を付ける。
example
var age:Int? = nil
このInt?
は、オプショナル整数型(= nilを取り得る整数型)と呼ばれる。
2-2. オプショナル整数型を使った計算
2-2-1. 問題点
// オプショナル整数型と整数型は型が異なるため、エラーが返る
var age:Int? = 25
print(age + 1)
↓↓↓
2-2-2. 解決策
変数名の後に「!」を書く。このように指定することで、オプショナル整数型の値が格納されている変数の中から、整数値のみを取り出すことができる。
// 「オプショナル整数型」の変数から整数を取り出す
var age:Int? = 25
print(age! + 1)
2-2-3. 注意点
変数ageにnilが代入されているときに「!」をつけると、アプリがクラッシュするので注意。
// nilが代入されている変数から値を取り出すと、アプリがクラッシュ
var age:Int? = nil
print(age! + 1)
★ つまり
オプショナル型の変数から値を取り出すときに「!」を付けることで、変数の中身がnilでないことを宣言していることになる。
3. オプショナル整数型のメリット:きちんとエラーが表示されるようにして、謎のクラッシュ防ぐ
3-1.NG例
Swiftのチェックは通るは、アプリがクラッシュする
var age:Int = nil
print(age + 1)
3-2. OK例
型が異なるため、Swiftのチェックできちんとエラーが表示される
var age:Int? = nil
print(age + 1)
4. 「!」を省略した書き方
4-1. 省略前
「!」を省略する前
var age:Int? = nil
print(age! + 1)
4-2. 省略後
「!」を省略したあと
var age:Int! = nil
print(age + 1)
=> 4-1.
と 4-2.
は、同じ働きをするが、4-2.
の方がシンプルに書くことができる。
5. まとめ
ViewController.swift
// ---(略)---
@IBOutlet weak var label: UILabel!
// ---(略)---
つまり、下記のUILabel!
は、labelプロパティから値を取り出すときに「!」を書くのを省略するための書き方。labelプロパティは、これ以降、プロパティのあとに「!」を付けることなく値を取り出すことができる。