プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

Swiftでguard構文を使用する。

この記事は2019年06月23日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. Swiftでguard構文を使用する
  3. おわりに

絶対に挫折しないiPhoneアプリ開発「超」入門 第7版 【Xcode 10 & iOS 12】 完全対応 (Informatics&IDEA)

絶対に挫折しないiPhoneアプリ開発「超」入門 第7版 【Xcode 10 & iOS 12】 完全対応 (Informatics&IDEA)

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回はPWEditorの開発で使用しているSwiftでguard構文を使用する方法についてです。

目次へ

2. Swiftでguard構文を使用する

Swiftのguard構文ですが、エラー処理の一種でエラー条件の時に処理を中断するために使用します。
guard構文はエラー条件になった場合、必ずスコープを抜ける処理を書かなければなりません。
同じようなチェックはif文でも可能ですが、if文の場合エラー条件のチェックは行えてもエラー条件に一致した状態でも書き方により処理を継続できます。
この点が大きな違いとなります。

メリット

  • エラー処理を強制できる。
  • オプショナル変数の場合、チェック後はアンラップした状態で使用できる。
  • 異常系の処理と正常系の処理を分離でき、if文のネストが深くならずに済む。

デメリット

  • 行数が多くなりがち。

構文

guard 条件 else {
    スコープを抜ける処理(return|break|continue|throw|abort())
}

実装例 : オプショナル変数のチェック

// URLが生成できない場合、処理を中断します。
guard let url = URL(string: "URL文字列") else {
    return
}

// 以降urlはアンラップされた状態で使用できます。

実装例 : 異常系の処理と正常系の処理を分離

guard構文を使用しない場合
// 引数param1,param2,param3は0より大きい場合、正常とします。
func foo(param1: Int, param2: Int, param3: Int) {
    if (0 < param1) {
        if (0 < param2) {
            if (0 < param3) {
                // 全てのパラメータが正常の場合の処理
            }
        }
    }
}
guard構文を使用した場合
// 引数param1,param2,param3は0より大きい場合、正常とします。
func foo(param1: Int, param2: Int, param3: Int) {
    guard param1 == 0 else {
        return
    }

    guard param2 == 0 else {
        return
    }

    guard param3 == 0 else {
        return
    }

    // 全てのパラメータが正常の場合処理
}

目次へ

3. おわりに

guard構文は、PWEditorの開発中に覚えました。
最初は主にオプショナル変数をアンラップするために利用していました。
そのうち最初にエラーチェックによるif文のネストが深くなるのを避けられることに気づきました。
このことは他の言語でも活用しています。

詳細! Swift iPhoneアプリ開発入門ノート iOS12 + Xcode 10対応

詳細! Swift iPhoneアプリ開発入門ノート iOS12 + Xcode 10対応

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ