モケラ

Tech Sheets

mokelab

SwiftのクラスをObjective-Cで使う

最終更新日:2016-09-11

Swiftで書かれたクラスをObjective-Cで使うには、Swiftのクラスが次の2点を満たしている必要があります。

  • publicがついている
  • NSObjectを継承している

例として次のSwiftクラスを定義したとします。

import Foundation

public class SwiftData : NSObject {
    var name : String
    var age : NSNumber

    public init(name : String, age : NSNumber) {
        self.name = name
        self.age = age
    }

    public func askName() {
        print("My name is \(self.name)")
    }
}

このクラスをObjective-C側で使いたい場合は、.mファイルで「Product名-Swift.h」をimportします。Product名がmyappの場合は#import "myapp-Swift.h"となります。

#import "ViewController.h"

#import "myapp-Swift.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    SwiftData *data = [[SwiftData alloc] initWithName:@"moke" age:@2];
    [data askName];
}
@end

init()の引数名はObjective-Cっぽく、initWithとして生成されます。

SwiftクラスをObjective-Cクラスの公開プロパティにしたい

先ほども太字で書きましたが、myapp-Swift.hは .mファイル でしかimportできません。そのため、Objective-Cクラスの公開プロパティ(.hの中で使いたい)にしたい場合は@classを使ってクラスの存在だけをコンパイラに伝える方法をとります。

// MyData.h
#import <Foundation/Foundation.h>
@class SwiftData;

@interface MyData : NSObject

@property(nonatomic) SwiftData *data;

@end

一覧に戻る