カテゴリを使用して、元のクラスのメソッドをプロパティとしても使用できるようにしたいです。
クラスA:
@interface ClassA
- (NSString*)foo;
@end
クラスAカテゴリー
@interface ClassA (Properties)
- (void)someCategoryMethod;
@property (nonatomic, readonly) NSString *foo;
@end
今これを行うと、動作しているように見えます(EDIT:動作しないかもしれません、文句はありませんが、奇妙なことがわかります)が、合成していないため、警告が表示されます私のカテゴリ実装のプロパティ。元のクラスがプロパティを合成するので、コンパイラにすべてが実際に問題ないことをどのように伝えることができますか?
表示される警告は次のとおりです。
warning: property ‘foo’ requires method '-foo' to be defined - use @synthesize, @dynamic or provide a method implementation
この警告を抑制するには、実装にこれを含めます。
@dynamic foo;
カテゴリのインターフェイスで何かが宣言されている場合、その定義はカテゴリの実装に属します。
コンセプトはあなたが尋ねている質問とは少し異なりますが、私はこれについて2つの記事を書きました。
これは、少なくとも、メソッドのスウィズリングよりもはるかに優れています。はるかに安全です。