41
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Objective-CベースのプロジェクトからSwiftのクラスを呼び出す

Posted at

やり方

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に依存しているはず。前のバージョンではこのように分かりやすくなかった気がする。

41
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?