swiftのクラスをobjective-Cから参照したい
単純にswiftクラスを定義しただけでは、objective-Cから参照することはできません。
swiftのクラスをobjective-Cから参照するためには
一番大事なことは、 [ProjectName]-Swift.h
クラスを用いること!です。
[ProjectName]-Swift.h
について
そのままの意味ですが、objective-Cからwwiftファイルを読み込むための中間ファイルです。
ビルド成功によって、自動生成されます。
つまり作成されていた分のSwiftファイル情報が、ビルド成功時に自動的に [ProjectName]-Swift.h
ファイルに記載されることとなります。
※ビルド成功しないと、生成・更新されないので注意。
[ProjectName]-Swift.h
を使う
swiftを利用したい .m
ファイルでimportします。
#import "[ProjectName]-Swift.h"
これで、swiftのクラスをobjective-Cから参照することができます。
でも参照できない場合がある!!
上記で成功しない場合、なにかしらの原因があります。
チェック1:参照するクラスはNSObjectの派生クラス?
objective-Cのオブジェクトは、 全てNSObject です。
そのため、objective-CはNSObjectのクラスじゃないと参照できません。
チェック2:クラスに @objcMembers
を付けてる?
swift4から導入されたものです。
Objective-Cから使用できるswiftのクラスは明示的に宣言することになりました。
下記のように宣言しなければなりません。
@objcMembers
class HogeClass: NSObject {
}
チェック3:その他
- ビルドが失敗していませんか?
- ビルドプロジェクトに属しているクラスですか?
※もっと原因があれば、都度追記します。
例外:swiftのstructは参照できない...
残念なことに、objective-Cからswiftのstructは参照することができません。
原因は、structはクラスじゃないからです。
Objective-CはNSObjectのクラスじゃないと参照できません。
objective-CはNSObjectじゃないクラスは参照できません。
クラスでもないstructは、参照対象にならないのです。
まとめ
objective-Cとswiftの共存のための話を書きましたが、
世の中的には、iOSのコードは基本全部swift化することが推奨されるようです。
新しくiosの勉強する人はぜひswiftの勉強に集中してください。
Author And Source
この問題について(swiftのクラスをobjective-Cから参照したい), 我々は、より多くの情報をここで見つけました https://qiita.com/fuwamaki/items/77d02097334b244de5e7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .