##1. コードを接続した際に自動的に追加されたコードを一つずつ紐解く
// ---(略)---
@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__を変数に代入する場合は、下記のように型を明示することが必要。そして、型の後に「?__」を付ける。
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例
var age:Int = nil
print(age + 1)
####3-2. OK例
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. まとめ
// ---(略)---
@IBOutlet weak var label: UILabel!
// ---(略)---
つまり、下記のUILabel!
は、labelプロパティから値を取り出すときに「!」を書くのを省略するための書き方。labelプロパティは、これ以降、プロパティのあとに「!」を付けることなく値を取り出すことができる。