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