Swift入門
看板に偽りありだがSwiftの入門といっても本当の入門ではなく、C/C++やJavaをやってきた人間がSwiftを見て何これ?ってなったところだけをまとめたもの。
?(Question Mark)
Swiftは変数の型に?がつくことがあります。
これはオプショナル型にすることを意味します。
オプショナル型ってなんぞい、と思うかもしれませんがnilを許容する型ということです。
Intはnilを代入しようとしてもシバかれますが、Int?はnilを入れても良いのです。
なお、IntとInt?は似て非なる型なので、同じ型として扱うことはできません。
1 2 3 |
|
とすると、Value of optional type 'Int?' must be unwrapped to a value of type 'Int'
というエラーが表示されて失敗します。
このような場合はアンラップしてあげないといけません。
!(Exclamation Mark)
Swiftにおける!はアンラップを表します。
アンラップはラップしているクラスを外すということで、Int型をオプショナル型にラップしている状態からアンラップするとInt型に戻る、という感じです。
先ほどエラーになったコードですが、アンラップすると問題なくなります。
1 2 3 |
|
エラーが消えました。アンラップの結果、Int?がIntになったのでInt同士の足し算になったからです。
ではもしこのとき、Int? の値がnilだったらどうなるでしょう?
1 2 3 |
|
1 |
|
というエラーが発生してしまいましたね。
よってオプショナル型をアンラップする際はnilでないことを自身で保証しないとダメです。
?(Question Mark)
Any型
SwiftにはAnyという型がある。
IntやStringなどの型はみんなAny型を継承している。
Any型にはなんでも入れれる。
1 2 |
|
といった感じに。
ただし、Int型の変数に数値をいれたAny型の変数を直接代入とかできない。
1 2 |
|
その場合はas!やas?といったキャストを用いる必要があるがそれは後述。
as/as!/as?
enum
Swiftのenumは以下みたいな感じ。
1 2 3 4 5 |
|
???ケースって何(笑)。switch case文でしか見たことないんだけど。
という感じの定義の仕方。
初期値も入れれる。
1 2 3 4 5 |
|
なんだろうね。使うときは、
1 |
|
って感じで使う。
guard
guard は 条件を満たさない時にelseの処理を行う、ifの逆バージョンみたいなやつ。
1 2 3 4 5 |
|
いや、ifでえぇやろ!
例えば居酒屋で20歳以上かどうかをチェックするプログラムを書くとすると
1 2 3 4 5 |
|
いや、めっちゃわかりにくい。20歳以上「じゃなかったら」else、という否定を頭の中でやるの。
なんでこんなクソみたいな構文作ったんだろう?
でも結構みんな使ってるから理解しないと他人のコードが読めないので仕方ない。
変な書かれ方のコード
他人のソースを見ていると、以下のようなよくわからんif文やguard文を見かける。
1 2 3 4 5 6 |
|
guardでも同様なコードが
1 2 3 4 5 6 7 8 |
|
どうもnilチェックをしているらしい。
が、Xcodeのコンパイラが警告を出すし、なんでこんな書き方?
1 |
|
普通に!= nil でいいしょ?
1 2 3 4 5 6 |
|
よくわからん。が、こういう書き方が流行ってるのか知らんけど結構書く人がいるのでコードを読めるようにするために学ぶ必要がある。
1 |
|
aaa | bbb | ccc |
---|---|---|
111 | 222 | 333 |
444 | 555 | 666 |