2016-11-29 16 views
0

目的Cでは、カテゴリはインポートするとクラス内でのみ「使用」されます。だから私がカテゴリNSString+categoryを持っているなら、私はそれを使用したい各クラスの#import NSString+category.hにしなければなりません。一部のSwiftクラスからObjective Cカテゴリを除外します

私はそのようなカテゴリを持っています。私が使用したいクラスのいくつかはSwiftに書かれています。このカテゴリをBridgingヘッダーに入れてSwiftに公開すると、すべての迅速なクラスがそれを使用します。どのようにこれを避けることができますか?

注:私のカテゴリは実際にUIViewControllerにあり、私がそこに置いたコードは、一部のViewControllerによってのみ使用されなければなりません。このカテゴリを「その他の」ViewControllerで使用するのは間違っていて不便です。

+3

"目的Cでは、カテゴリはインポートするとクラス内でのみ使用されます。"これは真実ではありません。そのカテゴリのメソッドは常にクラスに存在します。ヘッダーは_visibility_のみを提供します。インポートせずに呼び出すと、コンパイラー・エラーが発生します。 –

+0

Aha。私の悪い。私は効果的に私の質問に答えると思う。 – Joakim

+0

コードを表示できますか?また、SwiftとObjective-cを一緒に使用するための完全なチュートリアルを作成しました。 http://stackoverflow.com/a/40887287/4488252 –

答えて

2

あなたの基本仮定が間違っています:

客観Cでは、カテゴリだけで、私はそれをインポートする場合は、カテゴリ内

方法が上に存在しているクラスでは「使用する」になりますカテゴリがコンパイルされている場合はクラスです。ヘッダーをインポートすると、メソッド名が表示されます。それらの名前の1つを使用してメッセージを送信しようとすると、コンパイラは警告を表示しません。 (performSelector:またはランタイムライブラリを使用してメソッドを呼び出すこともできます)

Swiftクラスと同じことが言えますが、Objective-CヘッダーがSwiftに持ち込まれるため、 Swiftコードでのメソッドの可視性を制限する方法があると考えています。