混合フレームワークでの作業。 Obj-Cファイルの中にインポートされますが、内部クラスは公開されていません。同じフレームワーク内でObjective-Cの内部Swiftクラスにアクセスする方法は?
ドキュメントは明らかに内部claseesはスウィフトとのObj-Cの間で利用可能であるべき状態:
があなたと同じフレームワークをターゲットにスウィフトファイルのセットをインポートするにはObjective-Cの
にスウィフトのインポートObjective-Cコードでは、 は、フレームワークの傘のヘッダーに何かをインポートする必要はありません。 代わりにSwiftコード のXcode生成ヘッダーファイルを、Swiftコードを使用するObjective-C .mファイルにインポートします。 フレームワークターゲットの生成されたヘッダーは フレームワークのパブリックインターフェイスの一部であるため、パブリック 修飾子が付いた宣言のみが、フレームワークターゲットの生成されたヘッダーに表示されます。 あなた はまだスウィフト方法と、あなたのフレームワークのObjective-Cの部分の中から 内部修飾子でマークされたプロパティを使用することができ、 は限りが Objective-Cのクラスから継承したクラス内で宣言されている 。アクセスレベル修飾子の詳細については、 Access ControlをThe Swift Programming Language (Swift 2)に記載しています。ドキュメントに示されているように
コードサンプル(フレームワークを使用して新しいプロジェクトを作成します)
// SwiftObject.swift
public class SwiftObject: NSObject {
public class func doSomething() {}
}
internal class YetAnotherSwiftObject: NSObject {
internal class func doSomething() {}
}
// SomeObject.m file
@implementation SomeObject
- (void)someMethod {
[SwiftObject doSomething];
}
- (void)someOtherMethod {
[YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}
@end
ニース!私はそのマクロについて知らなかったし、Googleはあまり表示していない。 Appleのドキュメントから参考になっていますか? – Yariv
いいですか?これはひどく冗長で乱雑です。これは本当にあなたがする必要がありますか?私は同じ問題に遭遇しており、リンゴさえもこれ以上のことをする必要がありました。私はこれをあきらめて、客観的なCに戻るつもりです、これは不合理です!実際に動作するもの(検索時間後)を投稿する場合は+1してください。 –
Appleのドキュメントによれば、「Objective-Cクラスから継承するクラス内で宣言されている限り、フレームワークのObjective-C部分から内部修飾子でマークされたSwiftメソッドとプロパティは引き続き使用できます。 swiftクラスが別のobjcクラスから派生している場合、objcコードで利用できるはずです。私は同様の問題を抱えていて、@ objcを使用して素早くクラスをマークし、NSObjectから継承しましたが、objcコードではまだ使用できません。 – puru020