SCNRenderer에 카메라 유틸리티 메서드를 추가하는 범주를 작성했습니다. 이러한 동일한 방법은 SCNView 및 SCNLayer에도 똑같이 유용합니다. 이 카테고리가 관련 될 세 클래스는 모두 SCNSceneRenderer를 따릅니다. 특정 클래스가 아니라 특정 프로토콜을 준수하는 모든 클래스에 적용되는 범주를 작성할 수 있습니까?프로토콜을 준수하는 모든 클래스에 범주 구현
3
A
답변
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에 대해 구현하십시오. 필자는 유틸리티 유틸리티를 작성하는 길은 아마도 갈 길이라고 생각합니다. 나는 아마도 그것들을 몇몇 유틸리티 클래스에서 클래스 메소드로 만들 것이다. –
예 ... NSObject 아이디어에 대한 범주를 되돌아 보면,별로 이득이되지 않는 이상한 일입니다 ... –