我在SCNRenderer上编写了一个类别,它添加了一些相机实用程序方法。这些相同的方法对SCNView和SCNLayer同样有用。与这个类别相关的所有三个类都符合SCNSceneRenderer。是否可以编写一个不适用于特定类的类别,而是适用于符合特定协议的所有类?在符合协议的所有类上实现一个类别
3
A
回答
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
0
我不认为你可以在协议上添加类别,因为协议只是定义接口而不是实现。而在类别中,我们也需要实施。
相关问题
- 1. 指定一个实现协议的类
- 2. 一个类别可以在Objective C中实现协议吗?
- 3. 符合一个协议协议相关联的类型
- 4. 类不符合协议RequestRetrier
- 5. 类委托没有实现协议
- 6. 必须使用子类实现父母符合的协议吗?
- 7. 协议方法在类别中实现时无法识别
- 8. 符合多种协议的Casting类型作为单个协议
- 9. 如何指定一个符合类的协议在夫特
- 10. BitTorrent协议似乎不符合现实
- 11. Swift中的协议扩展凡对象是一个类,并符合协议
- 12. Swift:在一个类中实现协议初始化器
- 13. 在一个类中正确实现序列协议
- 14. 通过扩展使现有Objective C类符合swift协议
- 15. 一个类可能符合objective-c中的多个协议吗?
- 16. 符合协议的类型变量
- 17. 类型“的ViewController”不符合协议“Wsdl2CodeProxyDelegate”
- 18. 类型的ViewController不符合协议
- 19. 符合目的-C协议夫特类
- 20. 高级Swift2 - 在结构实现的类Vs的实施协议协议
- 21. 只允许某些类别的斯威夫特符合协议
- 22. 子类别诉讼协议
- 23. iOS错误:“协议限定符没有”ID“是古老的”当在一个类别中使用协议
- 24. 类型'customDataObject'不符合协议'序列'
- 25. 类型“串”不符合协议NilLiteralConvertible
- 26. 类型'ViewController'不符合协议
- 27. 类型“IntentHandler”不符合协议“INStartAudioCallIntentHandling”
- 28. 类型MyViewController不符合协议'STPPaymentContextDelegate'
- 29. 类型'ThirdViewController'不符合协议UITableViewDataSource
- 30. 类型'[String]'不符合协议'Equatable'
我为做什么,现在只是忽视的事实是这一类将是有益的对于多于一个类而言,只需将它用于SCNRenderer。我认为编写实用函数的路线可能是一条路。我可能会让他们在某些实用程序类上使用类方法。 – 2013-02-25 20:47:02
是啊...回想一下NSObject的想法,没有太多的收获是很奇怪的... – 2013-02-25 21:00:15