Objective-CからSwiftに移行するときに困るのが#defineで定義されたマクロです。
Bridging-Headerでimportしても、定数の定義はそのまま使用できますが、メソッドの定義は使用できません。
Swiftで直接使用できないのなら、Objective-Cを介して使えば良いです。
マクロ呼び出し用のメソッドを持つクラスを作成して、そのメソッドを使えば簡単です。
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 定数は使える print("DEFINE = %@", MSG_AAA) // メソッドは使えない //xLog("123") // マクロ呼び出し用クラスで使用 Class1.aLog("ABC") Class1.aLog(MSG_AAA) // インスタンスメソッドでもOK let c1 = Class1() c1.bLog("999") } }
#import "Header1.h" #import "Class1.h"
#ifndef Header1_h #define Header1_h #define MSG_AAA @"AAA" #define xLog(msg) NSLog(@" xLog = [ %@ ]", msg) #endif /* Header1_h */
@interface Class1 : NSObject + (void)aLog:(NSString*)message; - (void)bLog:(NSString*)message; @end
#import "Class1.h" #import "Header1.h" @implementation Class1 + (void)aLog:(NSString*)message { NSLog(@"NSLog = [ %@ ]", message); xLog(message); } - (void)bLog:(NSString*)message { NSLog(@"NSLog = [ %@ ]", message); xLog(message); } @end