SwiftとObjective-Cの定数を共有


Objective-Cで書かれたプロジェクトのswift化を進めています。進め方としては、既存のObjective-Cのコードはそのままに、新規に作る画面や機能をswiftで書くというやり方。

Objective-C側で書かれたdefineの定数。よくNSUserDefaultsなどのKeyとしてまとめてたりしますよね。

あれをSwiftからも使えるようにすべく、ラッパーをかいてみました。

まず、Objective-CのコードをSwiftで呼べるようBridging-Header.h に一行追加します。

Bridging-Header.h
#import "Defines.h"

そして、Objective-C用の定義ファイルであるDefines.hにクラスを追加します。今までは#defineだけの塊のファイルです。

Defines.h

#define kUSERDEFAULTS_HOGEHOGE @"UserDefaults_HOGEHOGE"

@interface Defines : NSObject

+ (NSString *)hogehogeUserDefaults;

@end
Defines.m

#import <Foundation/Foundation.h>
#import "Defines.h"

@implementation Defines

+ (NSString *) hogehogeUserDefaults { return kUSERDEFAULTS_HOGEHOGE; }

@end

そして呼び出し側からは、

Hogehoge.swift
UserDefaults.standard.set(password, forKey:Defines.hogehogeUserDefaults())

というところまで書いて、できたできたと、なる予定だったのですが、

Hogehoge.swift
UserDefaults.standard.set(password, forKey: kUSERDEFAULTS_HOGEHOGE)

でもOKでした。あれれ?ラッパーいらなかった?
っていうお話でした。