Swiftの書き方まとめ(繰り返し処理・条件式・エラー処理)

エンジニア

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の書き方の記事を上げていきます。

アプリ”NowShare”をダウンロード
情報共有アプリ"NowShare"
今からみんなでナレッジ共有! 本当に欲しい情報をキャッチ&リリース 教えてあげたい情報を知りたい人にすぐに共有。 ためになった情報にはいいねを押して盛り上げよう!
エンジニア
ナスジニアをフォローする
🍆ナスジニアのブログ(iPhoneアプリ開発)

コメント

タイトルとURLをコピーしました