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

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

Pre特殊文字難民

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

SwiftでZipファイルの解凍や圧縮する方法

SwiftでZipの解凍・圧縮処理の解説です。標準ライブラリにZip2があるやら3rdパーティのSSArchiveのObjective-Cのライブラリを Swiftにブリッジして利用するのが良い等の記載がありましたので調査してみます。

UIPageControlでペラペラめくるチュートリアル画面を作成する

UIPageControllでiOSアプリ初回起動時にのみ表示される, ペラペラめくるチュートリアル機能の説明です。プロジェクト作成時にPage-Basedを選ぶと作成することはできるのですが、既存のアプリに追加するには気がので、 既に作成したアプリに初回一回だけ表示するチュートリアルを解説します
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!