- 投稿日:2020-07-25T21:48:12+09:00
[swift5]swiftの特徴と型推論
swift特徴
"静的型付け言語"でコンパイル時や実行前の段階で変数や定数の型の情報を決定する言語。
静的型付け言語では誤った型の代入などがコンパイルエラーとして検出される為、プログラムの誤りに起因するエラーの一部をを実行前の段階で防ぐことができる。
コンパイルエラーはプログラム実行前に検出される為、コンパイルエラーが発生している限りはプログラムは実行されない。(型安全性(type safety))
一方、実行時エラーは実行中に判明するエラーなので実行時エラーが発生するとプログラムは強制終了します。
つまり、静的型付け言語は動的型付け言語に比べてコードの実行前の段階で幅広くコードの妥当性を検証することが出来る。そのため、より安全性が高く大規模なプログラム開発に向いている言語と言える。
型推論とは?
let a = 123 aはint型
let b = "abc" bはstring型定数aにint型を代入すれば定数aはint型として扱われ、定数bにstring型を代入すればstring型として扱われる。このように代入した値によってコンパイラ型が推測できる場合は、宣言時にその型を名医する必要はない。
これを型推論という。
型推論を活用すると多くの変数や定数の型宣言が省略できるため、プログラムが簡潔になる。swiftは安全性だけでなく、記述の簡潔さも兼ね備えている。
- 投稿日:2020-07-25T20:50:15+09:00
<Swift>CollectionViewCellに薄い影をつける
TodolistDetailViewController.swiftprivate func todolistCell(indexPath: IndexPath, todo: Todo) -> UICollectionViewCell { if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TodolistDetailCollectionViewCell", for: indexPath ) as? TodolistDetailCollectionViewCell{ cell.update(todoTitle: todo.title, todoExpireDate: todo.expireDate) // セルの境界からはみ出ているものを見えるようにする cell.layer.masksToBounds = false // 影をつける cell.layer.shadowOffset = CGSize(width: 0, height: 1) cell.layer.shadowOpacity = 0.2 cell.layer.shadowRadius = 1.0 return cell } return UICollectionViewCell() }
- 投稿日:2020-07-25T18:09:53+09:00
【Swift】ラベル付きループ文の使い方
はじめに
今回は、多重ループの内側から一気に抜け出す際に役立つ、ラベル付きループ文の書き方を紹介します。
ラベル付きループ文とは?
多重ループを構成するwhile文やfor文などにラベルを付けて置き、break文とcontinue文を使用する際、どのループから抜け出すのか、またはどのループの実行を継続するのかを、ラベルで指定する書き方です。
Swiftではあまり使われない方法ですが、場面によってはすごく効果的な手法になります。具体的な書き方
ラベルはwhile文やfor文の前に、識別子と「:」を置きます。
break文ではラベルの付けられたループから抜け出し、そのループの次の文の実行に移ります。
continue文はラベルの付けられたループの残りの部分の実行をスキップして、次の繰り返しが可能かどうか、条件の判定に移ります。
実際の書き方を以下に示します。loop1: while 条件~~ { loop2: while 条件~~{ while 条件~~ { break loop1 continue loop1 break loop2 continue loop2 } } }ラベル付きループ文の実践例
実際にラベル付きループ文を使って書いてみた、うるう年判定のコード例を紹介します。
Leapyear.swiftleap: if year % 4 == 0 { if year % 100 == 0 { if year % 400 == 0 { print("\(year)年は400で割り切れるのでうるう年です。") break leap } print("\(year)年は100で割り切れるのでうるう年ではありません。") break leap } print("\(year)年は4で割り切れるのでうるう年です。") }else { print("\(year)年は4で割り切れないのでうるう年ではありません。") }変数yearに様々な値を代入してLeapyear.swiftを実行すると、次のような出力が得られます。
出力1996年は4で割り切れるのでうるう年です。 // year = 1996 2000年は400で割り切れるのでうるう年です。 // year = 2000 2017年は4で割り切れないのでうるう年ではありません。 // year = 2017 2100年は100で割り切れるのでうるう年ではありません。 // year = 2100yearが2000の時、400で割り切れることがわかると、printを実行してからbreakで直ちにif文から抜け出すので、その下にあるprintは実行しません。
if文に対するbreakは必ずラベルが必要です。ラベルがなければ通常のループやswitch文からの脱出と解釈されます。また、if文もswitch文もループ文ではないので、continueでラベルを指定することはできません。終わりに
今回はラベル付きループ文について解説しました。必要になる場面は限られますが、うまく使えれば効果を発揮するので、ぜひ頭の片隅に置いておいてください。