Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
184
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Swift での #ifdef DEBUG のやり方

これまで Objective-C で開発をしていたとき、デバッグ時のみ実行したいコードは以下のように記述していました。

#ifdef DEBUG
    // ...
#endif

しかし Swift では同じ記述ができません。
Apple のドキュメントによると、代わりに以下のように記述できるとあります。

#if build_configuration
    // ...
#elseif build_configuration
    // ...
#else
    // ...
#endif

試しに #if DEBUG ... と書いてみましたが期待した動作をしません。
Apple のドキュメントをよく読むと以下のように書いてあります。

Swift code and Objective-C code are conditionally compiled in different ways. Swift code can be conditionally compiled based on the evaluation of build configurations. Build configurations include the literal true and false values, command line flags, and the platform-testing functions listed in the table below. You can specify command line flags using -D <#flag#>.

どうやらコンパイル時のオプションで -D flag と指定するようですね。
Xcode の Build Settings を見てみると、Swift Compiler - Custom Flags に Other Swift Flags という項目があります。
ここに -D DEBUG という定義を追加してみたところ、先ほどのコードは無事動作しました。
(まだ Xcode 6 は GM なのでスクリーンショットを貼り付けられないのが残念)

[追記 2014.09.21] Xcode 6 が正式にリリースされたのでスクリーンショットを貼り付けました。

swift_compiler-custom_flags-xcode601.png

プロジェクトを新規作成すると Preprocessor Macros にはこれまで通り DEBUG=1 の定義がされているのですが、Other Swift Flags は空っぽです。
Xcode 6 リリース時には最初から -D DEBUG が定義済みとなっていると良いですね。

[追記 2014.09.21] Xcode 6 が正式リリースされたので確認しましたが、残念ながら beta、GM のときと同様空っぽでした。残念。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
184
Help us understand the problem. What are the problem?