SlideShare a Scribd company logo
Swiftで書き換えて 
皆のマクロをリサイクル 
~Swift Study Session 05~
はじめに... 
以後出てくるコード上に違和 
感を感じる箇所等あると思い 
ます。 
見つけた場合、後ほどこっそ 
りご指摘頂けると嬉しいです。
目次 
・マクロとは 
・#pragma mark 
・#ifdef 
・#define
定数として使えたり… 
#define MACRO_STRING @"あいうえおabcde12345"
コードを読み易くしたり… 
#pragma mark - UITableViewDelegate
デバッグ時の切り分けが出来たり… 
#ifdef DEBUG 
NSLog(@"テストログ"); 
#endif
よく使う便利なもの。
#pragma mark
#pragma mark 
- Objective-C 
#pragma mark hoge 
! 
!- Swift 
// MARK: - hoge
#ifdef
#ifdef 
- Objective-C 
#ifdef DEBUG 
envText.text = @"これはデバッグです。"; 
#else 
envText.text = @"これは本番です"; 
#endif
#ifdef 
- Swift 
Other Swift Flagsに値を追加する必 
要がある。
#ifdef 
こんな感じ。
#ifdef 
#if DEBUG 
envText.text = "これはデバッグです。"; 
#else 
envText.text = "これは本番です"; 
#endif
#define
#define 
Swiftにはそもそもdefineとかない。
#define 
なのでGlobalの関数や変数で 
それっぽく実現してみました。
#define 
メソッドの呼び出しマクロ 
- Objective-C 
#ifdef DEBUG 
#define LOG(...) NSLog(__VA_ARGS__) 
#else 
#define LOG(...) 
#endif
#define 
メソッドの呼び出しマクロ 
- Swift 
func LOG(message: String){ 
#if DEBUG 
NSLog("%@",message) 
#endif 
}
#define 
定数マクロ 
- Objective-C 
#define NAME @"のせ!!!!!!!!!!!"
#define 
定数マクロ 
- Swift 
~Globalな関数で定義~ 
func NAME() -> String{ 
return "のせ!!!!!!!!!!!" 
}
#define 
定数マクロ 
- Swift 
~Globalな定数で定義~ 
let NAME: String! = "のせ!!!!!!!!!!!"
#define 
定数マクロ 
- Swift 
~Globalな定数で定義~ 
(初期化も一緒に出来ちゃうよVer) 
let NAME_C: String! = { 
var name = "のせ!!!!!!!!!!!" 
return name 
}() !
おまけ
おまけ 
ログに関数名と行番号を出せるようにする。 
func LOG(message: String, 
function: String = __FUNCTION__, 
line: Int = __LINE__){ 
#if DEBUG 
println("[(function) : (line)] (message)") 
#endif 
}
おまけ 
結果。 
[viewDidLoad() : 24] これはデバッグです。
まとめ 
• #defineが無くなってしまって違和感を感じてい 
る。(多分今だけ) 
• マクロではなく、一つの関数として読めるのは 
個人的に嬉しい。
ありがとうございました 
(^o^)/

More Related Content

What's hot

method_missingの紹介(2013 3Qカジュアル勉強会資料)
method_missingの紹介(2013 3Qカジュアル勉強会資料)method_missingの紹介(2013 3Qカジュアル勉強会資料)
method_missingの紹介(2013 3Qカジュアル勉強会資料)
Shinichirou Nakamura
 
Sencha_Mokumoku_LT
Sencha_Mokumoku_LTSencha_Mokumoku_LT
Sencha_Mokumoku_LT
1021ky
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
 
Programmer's Brain
Programmer's BrainProgrammer's Brain
Programmer's Brain
Takaaki Suzuki
 
ビルドの話 福井技術者のつどい #fukuitech
ビルドの話 福井技術者のつどい #fukuitechビルドの話 福井技術者のつどい #fukuitech
ビルドの話 福井技術者のつどい #fukuitech
Yusuke Nakamura
 
C#のココが好き!
C#のココが好き!C#のココが好き!
C#のココが好き!
Takaaki Suzuki
 
こじらせVBA
こじらせVBAこじらせVBA
こじらせVBA
satoshi ohya
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
karupanerura
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
karupanerura
 
なんとなくModができるようにな〜る講座
なんとなくModができるようにな〜る講座なんとなくModができるようにな〜る講座
なんとなくModができるようにな〜る講座
BaAR_Vendel
 

What's hot (11)

method_missingの紹介(2013 3Qカジュアル勉強会資料)
method_missingの紹介(2013 3Qカジュアル勉強会資料)method_missingの紹介(2013 3Qカジュアル勉強会資料)
method_missingの紹介(2013 3Qカジュアル勉強会資料)
 
Sencha_Mokumoku_LT
Sencha_Mokumoku_LTSencha_Mokumoku_LT
Sencha_Mokumoku_LT
 
Presentation! 2013.5
Presentation! 2013.5Presentation! 2013.5
Presentation! 2013.5
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
 
Programmer's Brain
Programmer's BrainProgrammer's Brain
Programmer's Brain
 
ビルドの話 福井技術者のつどい #fukuitech
ビルドの話 福井技術者のつどい #fukuitechビルドの話 福井技術者のつどい #fukuitech
ビルドの話 福井技術者のつどい #fukuitech
 
C#のココが好き!
C#のココが好き!C#のココが好き!
C#のココが好き!
 
こじらせVBA
こじらせVBAこじらせVBA
こじらせVBA
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
 
なんとなくModができるようにな〜る講座
なんとなくModができるようにな〜る講座なんとなくModができるようにな〜る講座
なんとなくModができるようにな〜る講座
 

Similar to SwiftSession5

C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005gotohayato
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
koturn 0;
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
悠滋 山本
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
Shin Sekaryo
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例
侑亮 原田
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行monglee
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違い
hiroshi oshiba
 

Similar to SwiftSession5 (15)

C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例
 
つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違い
 

SwiftSession5