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

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

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

HOME > 知っててお得なLiteral達「__FILE__等」

知っててお得なLiteral達「__FILE__等」

最近仕事でphpのcron実行時にログを出す作業が多いのですが、swiftでLogを効率的に出すには どうするかと調べていると知らないことが沢山出てきました。__FILE__や__FUNCTION__等の呼び出している ファイル名や関数名を調べるLiteralがあるようです。

  • __FILE__ => 現在のファイル名
  • __LINE__ => 現在の行数
  • __COLUMN__ => 現在の列数
  • __FUNCTION__ => 現在の関数名

参考:Swift 中級編byYusei Nishiyama
参考:Swiftの自前ログクラス
参考:Building assert() in Swift, Part 2: __FILE__ and __LINE__
参考:Swiftのデバッグが捗るデバッグ関数を独自定義する

やってみた

一度実際みてみましょう。


class ViewController: UIViewController {
    
    override func viewDidAppear(animated: Bool) {
        
        testLiteral()
    
    }
    
    func testLiteral(){
        print("function: \(__FUNCTION__))")
        print("file: \(__FILE__)")
        print("line: \(__LINE__)")
        print("colmn: \(__COLUMN__)")
    }

}

以下のようなログがでます。



function: testLiteral())
file: /Users/swiftsalaryman/Documents/xcode/test/test/ViewController.swift
line: 20
colmn: 25

カスタマイズ

さて記事を読んでいるとassertの処理を利用してLogを出すサンプルが多くありましたので 実証してみました。詳しくはそれぞれの参照サイトをご確認下さい。


class ViewController: UIViewController {
    
    override func viewDidLoad() {
        let testValue = 0;
        testAssert(testValue > 0)
    }
    
    func testAssert(@autoclosure predicate : () -> Bool) {
        #if DEBUG
            if !predicate() {
                print("assertion failed at \(__FILE__):\(__LINE__)")
                abort()
            }
        #endif
    }
}

上は何をしているかというと、testAssertの引数[testValue>0]を 評価して失敗していれば"assertion failed"をエラー内容やLINEを出力してabortで終了させる。といった方法です。 if DEBUGに関しては昔書いたこちらの記事をご参照ください。 デバッグ時にだけ実行するような方法が可能です。以下の様に出力されます。(if DEBUGがONの場合ですが、 もし表示されなければ、#ifDEBUGと#endifを削除して試してください。



assertion failed at /Users/swiftsalaryman/Documents/xcode/test/test/ViewController.swift:19

ただし、こちらassertをカスタマイズするだけでは役不足です。というのも assert処理というものがすでにあるからです。


class ViewController: UIViewController {
    
    override func viewDidLoad() {
        let testValue = 0;
        assert(testValue > 0)
    }
    
}

これを実行しても以下のログが表示されます。ほとんど同じです。



assertion failed: : file /Users/swiftsalaryman/Documents/xcode/test/test/ViewController.swift, line 13

なので自作でassert処理+logを保存したり、#if DEBUGで管理したい場合はいいのかもしれません。 ログと仲良くする為のツールですね!

まとめ

サンプル画像

知らない事がまだまだ多いSwift2.0でした。Swift3.0になったら大きく変わるんだろうなぁ、、、サイトを 一新しないといけませんね

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

Webブラウザをチラ見するWebabit

WebabitはWebブラウザをチラ見する為のアプリです。Notification CenterのToday Widegetでブラウザチェックしたり、 AppleWatchから確認したりできる、なんともいえない「ふーん」なアプリです

Pre特殊文字難民

記事を書いている時によくつまずくことがあります。preでコードを表示する際に、 カッコを使うと文章が消えてしまったり、ドルマークの変数が表示できなかったり。その度に検索して探しているのでサイトの中に入れてしまいます。 以前のバックスラッシュもそうですが、こういった特殊文字難民対策のページにしておきます。

UIStepper

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