Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > nilを気遣う便利屋「guard」(ifよりも便利か?)

防御力UP?nilを気遣う便利屋「guard」(ifよりも便利か?)

Swift2.0よりあらわれたguard。サンプルを探していると現れるようになってきました。ただ私もよくわかっていませんでしたので 検証してみます。guardを単語だけで考えると「防御」的な意味でしょうか、防御力をあげる型宣言、、、うーん。ひとまず調査してみます。

サンプル画像

参考:Swift 2.0 で追加された guard のいいところ
参考:Swift 2.0 で追加されたguard の有効利用
参考:The guard keyword in Swift 2: early returns made easy
参考:Swift Guard Statement
参考:Swift 2.0: Why Guard is Better than If

上記URLのタイトルだけみても「使える便利なguard」という感じが伝わってきました。ifよりも便利?とか意味深なことも描いてあるようです。 それぞれ調べてみます。.....

確認中....

どうやらguardはifと似た使い方をするステートメントの様です。関数内で利用して①引数がnilが含まれているかもしれない型(オプショナル型)で あった場合に活躍②returnしないとコンパイルエラーがでて分かりやすい。との利点があるようです。

やってみた

ソースコードでみてみましょう。

guardを使った場合


func saySwiftSalaryman(word: String?) {
    guard let theWord = word else { //ここでString?をunwrapしてtheWordにいれている。
        return
    }
    print(theWord)
}

こちらを見ただけではあまり恩恵はうけられないのでifを使った場合の処理も記載します。


guardを使わない場合


func saySwiftSalaryman(word: String?) {
    if let theWord = word {
        return
    }
    print(theWord)
}

↑のソースコードではコンパイルエラーが発生します。何故かわかりますでしょうか?

サンプル画像

アンラップしていない 変数をprint関数が引数に持てないからです。なのでtheWord変数にnilが含まれない保証をするためには以下のように 書き換える必要があります


func saySwiftSalaryman(word: String?) {
    let theWord = word!;
    print(theWord);
}

これだとnilが入っていたらクラッシュしてしまうので、、、、


func saySwiftSalaryman(word: String?) {
    if word == nil {
         return
    }
    let theWord = word!;
    print(theWord);
}

guardを使わない場合は色々とnilさんを気遣ってコーディングしないといけません


guardは勝手にnilを気遣ってくれる便利屋さん。オプショナル型を利用する場合nilだったらどうしよう、といった不安を除くために、 guardを使うのはソースコードをスッキリさせる方法なのではと思います

サンプル画像

比べてみると確かにスッキリしています。その他guardを利用するとreturn等の完了させる識別語を必要としており「忘れてた」ミスも 防ぐことができるので確実なコーディングをする上では「防御力」があがるといっても良さそうです。

まとめ

Optional型とうまく付き合うためには是非使って頂きたいGuardでした。気持ち的には防御力というより攻撃力が上がった気がしました。

↓こんな記事もありますよ!

Facebook SDK のAppEventを検証する

さて、AppEventですが、FacebookのAppを利用したログシステムなのかな。ログをカスタマイズして保存して、 それを解析できる、そんな感じなのかなと思っています。 広告利用の為に、インストールされた数やログの解析によってユーザの動作を確認できるようですので細かく設定できるのではと思います。 まずは上記のようにログを保存する、ログを読み込む、ができるのかを検証してみます

SqliteのDBファイル保存+レビュー却下

2回既にレビューを通過していたアプリが、バイナリレビューで却下されてしまいました。理由は、2.23 Details On launch and content download, your app stores 26.48MB on the user's iCloud, which does not comply with the iOS Data Storage となっていてiCouldに保存される量にしては多いから管理してください、といった旨の内容でした。別に却下理由に難癖つけるつもりではないのですが、最初のレビュー時にいってほしい。。。

UIStepper

さて今回は基本のコンポーネントの一つStepper(メモリを少しずつ+とーで上下させるコントロール)を説明します。 単純なコントロールですのが、初期設定で、+と-が表示される優れものです。ただ、単調な為に記事にするのが面白くないので、 何度も申し訳ありませんが「ヒゲ」にフォーカスして、ヒゲを剃るStepper(ヒゲの量を調整する)を作成して説明してみます。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!