モケラ

Tech Sheets

mokelab

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の準備ができます。

一覧に戻る