Objective-CのプロジェクトからSwiftのクラスを使う
えらい苦労したよ。
タイトル通り、Objective-CのプロジェクトからSwiftのクラスを使いたかったんだわ。
手順で言うとSwiftのクラスをどこぞからドラッグ&ドロップするなり、New Fileで作成でもいいんだけど、Swiftのファイルを生成するじゃない。
するとXcodeが

って聞いてくるけど、Objective-CからSwiftクラスを使うのなら関係ない(はず)。これは逆にSwiftからObjective-Cのクラスを使う時に使うファイル。だからNOを選択しても問題ないと思う。
やり方を調べると
#import “プロジェクト名-Swift.h”
でOK、とかあるんだけど、、、まずこれがはまったのよ。
Xcodeが自動的に作ってくれるよってどこ見ても書いてるけど、ウチのXcodeはぐーたらなのかやる気がないのかそんなファイル作ってくれなかったんだ。
しょうがないから自分でヘッダファイル作成してみたりしたんだけどうまくいかない。
ようやくたどり着いたのが、作ってるけど表示されないってこと。
ニャンですとー?!逆の場合(SwiftからObjCクラスを使う場合)だとプロジェクト名-Bridging-Header.hってファイルがちゃんとXcodeに出てたので勘違いしてたんだわ。
ってことで、
プロジェクト名-Swift.hってファイルはXcodeには表示されません。
ちなみに、ちゃんとファイルができていなければimport文でXcodeがそんなファイルねえよ!って教えてくれるはず。何も言わなければimportはできているんだろう。あと、
#import “プロジェクト名-Swift.h”
のファイル名上でcommand+クリックで中身を確認できる(何書いてるか理解できんけど)。
ところが、まだうまくいかなかったんだ、俺の場合。
Objective-CのSwiftのクラスからオブジェクトを作成する
MySwiftClass *object = [MySwiftClass new];
という部分で、
Use of undeclared identifier ‘MySwiftClass’
というエラーが出るのよ。
MySwiftClassはNSObjectを継承してるし、念のため@objcも書いたりしてるのにやっぱりだめ、、、
Swiftのプロジェクトからはちゃんと使えるクラス、という確認もしてたのに。
ようやく見つけたのがこのページ。
ios - Including Swift files in Objective-C - Stack Overflow
Swiftのクラス宣言の前に’public’を付けよ
という内容。
これでやっと成功。長かったな〜
タイトル通り、Objective-CのプロジェクトからSwiftのクラスを使いたかったんだわ。
手順で言うとSwiftのクラスをどこぞからドラッグ&ドロップするなり、New Fileで作成でもいいんだけど、Swiftのファイルを生成するじゃない。
するとXcodeが

って聞いてくるけど、Objective-CからSwiftクラスを使うのなら関係ない(はず)。これは逆にSwiftからObjective-Cのクラスを使う時に使うファイル。だからNOを選択しても問題ないと思う。
やり方を調べると
#import “プロジェクト名-Swift.h”
でOK、とかあるんだけど、、、まずこれがはまったのよ。
Xcodeが自動的に作ってくれるよってどこ見ても書いてるけど、ウチのXcodeはぐーたらなのかやる気がないのかそんなファイル作ってくれなかったんだ。
しょうがないから自分でヘッダファイル作成してみたりしたんだけどうまくいかない。
ようやくたどり着いたのが、作ってるけど表示されないってこと。
ニャンですとー?!逆の場合(SwiftからObjCクラスを使う場合)だとプロジェクト名-Bridging-Header.hってファイルがちゃんとXcodeに出てたので勘違いしてたんだわ。
ってことで、
プロジェクト名-Swift.hってファイルはXcodeには表示されません。
ちなみに、ちゃんとファイルができていなければimport文でXcodeがそんなファイルねえよ!って教えてくれるはず。何も言わなければimportはできているんだろう。あと、
#import “プロジェクト名-Swift.h”
のファイル名上でcommand+クリックで中身を確認できる(何書いてるか理解できんけど)。
ところが、まだうまくいかなかったんだ、俺の場合。
Objective-CのSwiftのクラスからオブジェクトを作成する
MySwiftClass *object = [MySwiftClass new];
という部分で、
Use of undeclared identifier ‘MySwiftClass’
というエラーが出るのよ。
MySwiftClassはNSObjectを継承してるし、念のため@objcも書いたりしてるのにやっぱりだめ、、、
Swiftのプロジェクトからはちゃんと使えるクラス、という確認もしてたのに。
ようやく見つけたのがこのページ。
ios - Including Swift files in Objective-C - Stack Overflow
Swiftのクラス宣言の前に’public’を付けよ
という内容。
これでやっと成功。長かったな〜
スポンサーサイト