やり方
Objective-CベースのプロジェクトでSwiftのNSObjectを継承したクラスのコードを新規作成し、ビルドすると<# ProductName #>-Swift.hがプロジェクトに一つ自動的に作られる。
それをObjCからimportするだけでクラスが使えるようになる
#import "<# ProductName #>-Swift.h"
例
- ProductNameはSampleとする
- Swiftで作成するのはAccontクラスとする
Swift側
import Foundation
class Account : NSObject {
//twitterIDを保持
let twitterId: Int64
init(twitterId: Int64) {
self.twitterId = twitterId
}
}
Objective-C側。Swiftのクラスを使いたい
#import "Sample-Swift.h"
Account *account = [[Account alloc] initWithTwitterId:9791362];
その他
<# ProductName #>-Swift.hについて
- <# ProductName #>-Swift.hはどこにあるのかわからないがそれでいい
- <# ProductName #>-Swift.hはSwift側のクラスにメソッドを追加するなどした場合、ビルド後に自動的にそれが反映されている
- そのためgitなどで管理したりメンバーに共有しなくても良い
下記に"Sample-Swift.h"の自動生成された内容一部抜粋。Objective-Cから利用されることが理解できる。
@interface Account : NSObject
@property (nonatomic, readonly) int64_t twitterId;
- (instancetype)initWithTwitterId:(int64_t)twitterId OBJC_DESIGNATED_INITIALIZER;
@end
自動生成された結果はXcode6.1とSwift1.1に依存しているはず。前のバージョンではこのように分かりやすくなかった気がする。