HOME > 知っててお得なLiteral達「__FILE__等」
最近仕事でphpのcron実行時にログを出す作業が多いのですが、swiftでLogを効率的に出すには どうするかと調べていると知らないことが沢山出てきました。__FILE__や__FUNCTION__等の呼び出している ファイル名や関数名を調べるLiteralがあるようです。
参考: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になったら大きく変わるんだろうなぁ、、、サイトを 一新しないといけませんね
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|