やりたいこと
Objective-C の .hファイルで、swiftのクラスを呼びだしたい。
なぜ?
swiftで定義したスキーマクラスをObjective-Cのproperty(外部からアクセスできるインスタンス変数)に組み込みたかったから
前提
以下のようなクラスをswiftで実装したとします。
内部変数に深い意味はありません。少し複雑なスキーマだ、と想定してください。
Objective-C側で呼び出せるようにNSObjectを継承していることには留意しておいてください。
hoge.swift
class SwiftClass:NSObject{
init(a:CGFloat, b:Int, c:String){
self.a = a
self.b = b
self.c = c
}
var a:CGFloat
var b:Int
var c:String
}
NG例
色々探りましたが、まず試したのは以下のような実装。
.mファイルではイケる方法ですが、、
hoge.h
#import "{Project名}-Swift.h"
@interface ObcClass : NSObject
@property SwiftClass *swift_schema;
@end
.hファイルでは、
'{Project名}-Swift.h' file not found.
と、エラリます。
OK例
importするのではなく、class宣言をしてください。
hoge.h
@class SwiftClass;
@interface ObcClass : NSObject
@property SwiftClass *swift_schema;
@end
参考
おわり
僕は普段swiftで書いているんですが、アプリの既存コードをイジる際には、Objective-Cを触ることが多々あります。そこで躓きやすいのが、Swift連携の箇所で、今回の記事みたいなケースは結構あると思います。参考にしていただければ。