3

SCNRendererに、いくつかのカメラユーティリティメソッドを追加するカテゴリを作成しました。これらの同じメソッドは、SCNViewとSCNLayerにも同様に役立ちます。このカテゴリが関連する3つのクラスはすべて、SCNSceneRendererに準拠しています。特定のクラスではなく、特定のプロトコルに準拠するすべてのクラスに適用されるカテゴリを作成することは可能ですか?

4

2 に答える 2

3

これを行う最も簡単な方法は、SCNSceneRenderer オブジェクトを取るいくつかのユーティリティ関数を記述することです。

void ABCDoSomethingUseful(id<SCNSceneRenderer> renderer)
{
   //...
}

void ABCDoSomethingElseUseful(id<SCNSceneRenderer> renderer)
{
   //...
}

メソッド呼び出し構文を使用したい場合、またはサブクラスで実装をオーバーライドできるようにしたい場合は、メソッドを NSObject のカテゴリとして実装する別のオプションがあります。

// This goes in a source file:

@interface NSObject (SCNSceneRendererConformance) <SCNSceneRenderer>
// Surpress compiler warnings about NSObject not responding to 
// SCNSceneRenderer's messages
@end

@implementation NSObject (MyCategory)

- (void)abc_doSomethingUseful
{
    //...
}


- (void)abc_doSomethingElseUseful
{
    //...
}

@end

次に、それらをプロトコルで公開します。

// This goes in a header file:

@protocol MyProtocol <NSObject>
- (void)abc_doSomethingElseUseful;
- (void)abc_doSomethingUseful;
@end

SCNSceneRenderer に準拠するクラスごとにインターフェイスのみのカテゴリを追加し、プロトコルにも準拠することを宣言します。

// This also goes in a header file:

@interface SCNLayer (MyProtocolConformance) <MyProtocol>
@end

@interface SCNView (MyProtocolConformance) <MyProtocol>
@end
于 2013-02-21T23:59:18.813 に答える
0

プロトコルは実装ではなくインターフェースを定義するだけなので、プロトコルにカテゴリを追加できるとは思いません。カテゴリでは、同様に実装する必要があります。

于 2013-02-21T22:27:27.940 に答える