Swiftというプログラミング言語の書き方についてのまとめサイトになります。
これからiPhoneやMac向けのアプリケーション開発に挑戦したい!という人の助けになれればと思います。
もっと初歩的な事を知りたい方は前の記事を参考にしていただければと思います。
繰り返し処理
Swiftでの繰り返し処理(ループ)の書き方を記載します。
for-in ループ
for-in
ループは、シーケンス(配列、範囲、コレクションなど)内の要素を繰り返し処理するために使用されます。
for 要素 in シーケンス {
// 要素に対する処理
}
例
let numbers = [1, 2, 3, 4, 5]
for number in numbers {//変数numberに配列numbersの左から順番に値が入っていく
print(number)
}
1
2
3
4
5
while ループ
while
ループは、指定の条件が真の場合に繰り返し処理を実行します。
while 条件 {
// 条件が真の間、繰り返し実行
}
例
var counter = 0
while counter < 5 { //counterの値が5になるまでループする
print(counter)
counter += 1 //counterに+1されていく
}
0
1
2
3
4
条件が偽になるまでループが続行します。なのでループを抜けるための記述を忘れないようにしましょう。
※repeat-while ループという繰り返し処理もありますが、私はあまり使った記憶がないので記載は省きます。
条件式
Swiftの条件式は、特定の条件が満たされるかどうかを評価し、条件に応じてプログラムの制御フローを変更するために使用されます。
if文
if
文は、指定された条件が真の場合に特定のコードブロック({}の中の処理)を実行します。
if 条件 {
// 条件が真の場合に実行されるコード
} else if 他の条件 {
// 他の条件が真の場合に実行されるコード
} else {
// すべての条件が偽の場合に実行されるコード
}
例
let number = 10
if number > 0 {
print("Positive")
} else if number < 0 {
print("Negative")
} else {
print("Zero")
}
Positive
switch文
switch
文は、複数の値や条件に基づいて複数の実行ブロックの中から適切なものを選択し、実行します。
switch 値 {
case パターン1:
// パターン1に一致した場合に実行
case パターン2:
// パターン2に一致した場合に実行
default:
// すべてのパターンに一致しない場合に実行
}
例
let day = "Monday"
switch day {
case "Monday":
print("It's Monday")
case "Tuesday":
print("It's Tuesday")
default:
print("It's another day")
}
It’s Monday
三項条件演算子
三項条件演算子は、単純な条件を1行で評価し、結果に基づいて値を選択します。
条件 ? 真の場合の値 : 偽の場合の値
例
let age = 25
let status = age >= 18 ? "Adult" : "Minor"
print("Status: \(status)")
Status: Adult
※アプリ開発を行う時などで調べた際はこの表現が良く使われています。覚えときましょう。
エラー処理
Swiftでは、エラー処理はdo-catch
文とエラー型を使用して行われます。エラー処理は、プログラムが実行時にエラーが発生した場合に適切に処理する仕組みです。エラー処理を行うためには以下の3つのフローが主流になります。
1. エラー型の定義
まず、エラーを表現するためのカスタムエラー型(通常は Error
プロトコルに準拠する)を定義します。
enum MyError: Error {
case runtimeError(String)
}
2. エラーをスロー
エラーが発生した場合、throw
ステートメントを使用してエラーをスローします。throw
は、Swiftでエラーを発生させるためのキーワードです。エラーが発生した場合、throw
ステートメントを使用してエラー情報をシステムに送り、エラー処理を開始します。
func divide(_ a: Int, by b: Int) throws -> Int {
if b == 0 {
throw MyError.runtimeError("Division by zero")
}
return a / b
}
エラーを throw
することにより、プログラムが正常な実行パスからエラーパスに切り替わり、エラー処理が行われます。エラー処理の部分でエラーをキャッチして適切に対処することが期待されます。
3. エラー処理の実行
エラーが発生する可能性のあるコードを do-catch
ブロック内に配置し、エラーをキャッチするコードを記述します。
do {
let result = try divide(10, by: 2)
print("Result: \(result)")
} catch MyError.runtimeError(let errorMessage) {
print("Error: \(errorMessage)")
} catch {
print("An unexpected error occurred: \(error)")
}
do
ブロック内でエラーがスローされた場合、該当の catch
ブロックが実行されます。上記の例では、ゼロで割るエラーが MyError.runtimeError
としてキャッチされます。
まとめて記載すると以下になります。
enum MyError: Error {
case divisionByZero
}
func divide(_ a: Int, by b: Int) throws -> Int {
if b == 0 {
throw MyError.divisionByZero
}
return a / b
}
do {
let result = try divide(10, by: 0)
print("Result: \(result)")
} catch MyError.divisionByZero {
print("Error: Division by zero")
} catch {
print("An unexpected error occurred: \(error)")
}
Error: Division by zero
上記の例では、divide
関数でゼロで割るエラーが throw
され、do-catch
ブロック内でエラー処理が行われています。catch
ブロックでエラーをキャッチし、適切なメッセージを表示しています。
参考:オプションでエラーハンドリング
エラーが発生しない場合に備えて、try?
を使用してエラーハンドリングを省略し、結果をオプション型で取得することもできます。
※ただし、エラー情報は失われます。
let result = try? divide(10, by: 2)
if result != nil {
print("Result: \(result!)")
} else {
print("An error occurred")
}
これにより、エラー処理を実装し、エラーが発生した場合に適切に処理できるようになります。つまり、エラーが発生しない場合に正常な結果を取得し、エラーが発生した場合に nil
を返すことができます。これにより、エラーが発生してもアプリケーションがクラッシュするのを防ぐことができます。
以上になります。
ここから他にも難易度を上げたSwiftの書き方の記事を上げていきます。
コメント