Swiftで擬似マクロ
Swiftファイルではマクロを定義する事ができません。
同様の事をしたい場合は下のようにclassの外に変数を定義します。
もちろん他のSwiftファイルからも参照できます。
グローバル変数となるのであまり使いたくないですが。
let MACRO = "aaa" class MyClass { func method() { print(MACRO) // → aaa } }
引数付きのマクロと同様の事をしたい場合は下のようにメソッドを定義します。
func MACRO(value: String) -> String { return value + "+++" } class MyClass { func method() { print(MACRO("Hello")) // → Hello+++ } }
Objective-cのマクロを呼ぶ
Objective-cのマクロはBridging-Header
に定義されているかBridging-Header
でインポートしているファイルにあるものなら呼ぶ事ができます。
#define MACRO "String"
// SwiftからObjective-cで定義したマクロを呼ぶ
print(MACRO)
しかし下のような値を渡すマクロは使う事ができません。
#define MACRO(value) "String"
// SwiftからObjective-cで定義したマクロを呼ぶ print(MACRO("AAA")) // → これはエラー
まとめ
以上のような事で簡単なマクロはSwiftでも再現する事ができます。
しかしマクロのようにコードを置換するものではないため、複雑なマクロは定義できなさそうです。