Objective-CのクラスをSwiftで使う
最終更新日:2016-09-11
Objective-Cで作成したクラスをSwiftで使うには、Bridging-Headerファイルにimport文を書くだけです。
これだけでは記事にならないので、もう少し詳しく説明します。
まず、言語をObjective-CにしてCocoa Classを追加します。すると、次のように「Bridging Headerの設定やる?」と聞いてくるので、「Create Bridging Header」を選択します。
すると、「Product名-Bridging-Header.h」というファイルが追加されます。Product名がmyappの場合はmyapp-Bridging-Header.hになります。
例としてObjCDataというクラスを作成することにします。
// ObjCData.h
#import <Foundation/Foundation.h>
@interface ObjCData : NSObject
// property
@property(nonatomic) NSString *name;
@property(nonatomic) NSNumber *age;
// method
- (void)askName;
@end
// ObjCData.m
#import "ObjCData.h"
@implementation ObjCData
- (void)askName {
NSLog(@"My name is %!@(MISSING)", self.name);
}
@end
このファイルにSwift側で使いたいクラスのヘッダファイルをimportすればOKです。
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "ObjcData.h"
Swift側では、次のようにObjcDataクラスが使えます。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let data = ObjCData()
data.askName()
}
ここまで実装したものをGithubで公開しています。
すでにObjective-Cでクラスを作成していて、Swiftに徐々に移行したいプロジェクトの場合は
- swiftファイルを1つ以上追加する
- ダミーで1つCocoa Classを追加する
という手順でBridging Headerの準備ができます。