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になったら大きく変わるんだろうなぁ、、、サイトを 一新しないといけませんね

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

Backslashを忘れない

ショートカットキーで(\)を入力するには「optionキーを押しながら、¥キーを押す」で可能なのですが、 なにかと、あれ、、、なんだったっけ?と忘れる事が多かったので、バックスラッシュ拡大表示。

NSFileManagerでAPP保存領域のデータ操作

ファイルやディレクトリ作成はなんとなく面倒くさいイメージがありましたが、この記事で少し自分の中で壁が低くなった気がします。 よろしければご利用くださいませ。

UIScrollViewでパラパラ画像切り替え

画像のパラパラ切り替えフォトギャラリーを作成できます。大きな画像の一部分だけを切り抜きしてマスク表示するクラスです。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!