2013-02-21 4 views
3

SCNRenderer에 카메라 유틸리티 메서드를 추가하는 범주를 작성했습니다. 이러한 동일한 방법은 SCNView 및 SCNLayer에도 똑같이 유용합니다. 이 카테고리가 관련 될 세 클래스는 모두 SCNSceneRenderer를 따릅니다. 특정 클래스가 아니라 특정 프로토콜을 준수하는 모든 클래스에 적용되는 범주를 작성할 수 있습니까?프로토콜을 준수하는 모든 클래스에 범주 구현

답변

3

SCNSceneRenderer 개체 걸릴 일부 유틸리티 함수 작성하는 것이이를위한 가장 간단한 방법 : 메서드 호출 구문을 사용하거나에서 구현을 재정의 할 수있게하려면하려면

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

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

// 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 
서브 클래스는, 또 다른 옵션은 NSObject의의 카테고리로 메소드를 구현하는 것

그것은 또한 당신의 프로토콜을 준수 함을 선언 SCNSceneRenderer에 맞는 각 클래스에 대한 인터페이스 전용 카테고리를 추가 :

// This also goes in a header file: 

@interface SCNLayer (MyProtocolConformance) <MyProtocol> 
@end 

@interface SCNView (MyProtocolConformance) <MyProtocol> 
@end 
+0

난 그냥 사실을 무시한다 지금 무슨 짓을했는지이 카테고리 유용 할 것 둘 이상의 클래스에 대해서는 SCNRenderer에 대해 구현하십시오. 필자는 유틸리티 유틸리티를 작성하는 길은 아마도 갈 길이라고 생각합니다. 나는 아마도 그것들을 몇몇 유틸리티 클래스에서 클래스 메소드로 만들 것이다. –

+0

예 ... NSObject 아이디어에 대한 범주를 되돌아 보면,별로 이득이되지 않는 이상한 일입니다 ... –

0

프로토콜이 인터페이스를 구현하지 않기 때문에 프로토콜을 통해 카테고리를 추가 할 수 있다고 생각하지 않습니다. 반면 카테고리에서는 우리가 구현해야합니다.

관련 문제