この記事は2019年06月23日に投稿しました。
目次
絶対に挫折しないiPhoneアプリ開発「超」入門 第7版 【Xcode 10 & iOS 12】 完全対応 (Informatics&IDEA)
- 作者: 高橋京介
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/11/22
- メディア: 単行本
- この商品を含むブログを見る
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対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2018/11/03
- メディア: 単行本
- この商品を含むブログを見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688