これまでなんとなくで理解していたSwiftの用語を備忘録としてまとめていきます。
この間、初めてレビューを受けて基本用語が理解できておらず、苦しかったため…
わからない単語は今後追記していく予定です。(多分)
間違っていることなどありましたら優しく教えてください
1.letとvarの違い
2.クロージャ
3.オプショナル
4.アンラップ
5.オプショナルバイディング
6.guard
7.didSet
8.lazy
9.lifecycle
[10.[weak self]](#10-[weak self])
11.参考文献
1. letとvarの違い
let・・・一度初期化したら、後から書き換えられない変数に使う
var・・・後から書き換えることができる変数に使う
また、型を宣言しなくてもswift側で自動判別してくれる
var num = 10
num = 20 //書き換えられる
let num2 = 3.14
num2 = 4.14 // エラーが発生する
2. クロージャ
クロージャとは
クロージャとは実行可能なコードとそれが記述された箇所の環境を取り込んで、後から評価できるように保存したものです。
要するに再利用可能なひとまとまりな処理で、関数の一種です。
{(仮引数:型)-> 戻り値の型 in
クロージャ実行時の処理
}
これが基本形です。サンプルを書くと
var c1 = { (x:Int) -> Int in
x+1
}
c1(3) //実行結果:4
c1に代入されているものがクロージャのインスタンスで、代入の右辺はクロージャ式と呼ばれます。
クロージャ実行時の処理が複数行ある場合はブロックの中でreturn文を実行しなくてはいけません。
let c2 = { (a:Int, b:Int) -> Double in
if b == 0 {return 0.0} //bが0の場合は0を返す
return Double(a) / Double(b) //0以外の時は割り算した値を返す
}
print(c2(10,8)) // 実行結果 1.25
クロージャと関数の違い
クロージャは関数と同じように実行できますが、関数と区別する必要はないそうです。基本的には、クロージャと関数は区別なく扱うことができますが、変数や定数に格納された関数の呼び出しには注意が必要です。
//TODO
3. オプショナル
オプショナル型は、通常の変数と異なり空の値(値が無い)状態を保持することができる変数です。
オプショナル型を宣言するときは、変数の型の後ろに?(クエスチョン)をつけます。
var a: Int = 0
var b: Int? = 10
b = nil //代入可能
a = nil //エラー発生
また、初期値を設定しないとnilになります。
4. アンラップ
オプショナルInt型は整数かnilなのですが、Int型そのものではないため変数に代入や演算に使うことはできません。
var tax: Double? =1.10
var price = 1000 * tax //エラーになる
上記のようにオプショナル型からデータを取り出すことを**アンラップ(開示)**と言います。アンラップのためにはオプショナル型に対して「!」という記号を使います。
var tax: Double? =1.10
var price = 1000 * tax!
5. オプショナルバイディング
オプショナル型の式の値がnilではなかった場合、その値をif文のthenで使いたい時に用いるのがこの**オプショナルバイディング(if-let文)**です。オプショナル型に入っている値がnilかどうかわからない時に使います。
var tax: Double? =1.10
if let x = tax {
var price = 1000 * tax
} else {
print("エラー発生")
}
オプショナル型がnilでないことをif文で確認後、taxを演算に使用しています。
そのため、オプショナルバイディングのあとはアンラップは不要です。
6. guard
安全にデータを取り出す際にguard文を使います。
guard 条件 else {
breakやreturn
}
条件が成立しなかった際にelse文が実行され、そのコードブロックから抜け出します。
チェックする値がオプショナル型である場合、nilチェックと同時にアンラップすることができ、そのアンラップされた変数をguard文の後も使うことができます。
func printMessage(message: String?) {
guard let thisMessage = message else { //nilのチェックをし、同時にアンラップされた変数を使用可能にしている。
print("nilです")
return
}
print(thisMessage)
}
7. didSet
Storyboardからボタンやテキストフィールドを生成した際に、部品をまとめて書くことができる。
@IBOutlet weak var emailTextField: UITextField! {
didSet {
emailTextField.placeholder = R.string.localizable.email()
emailTextField.clearButtonMode = UITextField.ViewMode.always
}
}
これによってviewDidLoad()をスリムに書くことができ、また、コードの可読性が上がる。
8. lazy
9. lifecycle
10. [weak self]
11. 参考文献
https://medium.com/@daikimochizuki/ios-swift-didsetでviewdidloadをスリム化しよう-867fe1e97ddc
https://www.sejuku.net/blog/32607