我在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. 指定一個實現協議的類
- 3. 一個類別可以在Objective C中實現協議嗎?
- 4. 類別對實現協議的類有什麼影響?
- 5. 符合一個協議協議相關聯的類型
- 6. iOS類別符合具有以下屬性的協議:如何實現
- 7. 聲明符合目標c協議與一個類別,並與另一類別
- 8. 類不符合協議RequestRetrier
- 9. 類不符合協議
- 10. UIActionSheet - 類沒有實現'UIActionSheetDelegate'協議
- 11. 類委託沒有實現協議
- 12. 必須使用子類實現父母符合的協議嗎?
- 13. 協議方法在類別中實現時無法識別
- 14. 符合多種協議的Casting類型作爲單個協議
- 15. NSObject實現協議上的類別導致未實現方法警告
- 16. 定義一個符合多個協議/協議+超類的變量
- 17. 如何使所有的子類符合協議?
- 18. 如何實現協議一般與類別?
- 19. 如何指定一個符合類的協議在夫特
- 20. 如何創建一個計數符合某個協議的對象的類別?
- 21. BitTorrent協議似乎不符合現實
- 22. Swift中的協議擴展凡對象是一個類,並符合協議
- 23. 在一個類中正確實現序列協議
- 24. Swift:在一個類中實現協議初始化器
- 25. 通過擴展使現有Objective C類符合swift協議
- 26. 一個類可能符合objective-c中的多個協議嗎?
- 27. 符合協議的類型變量
- 28. 類型的ViewController不符合協議
- 29. 類型「的ViewController」不符合協議「Wsdl2CodeProxyDelegate」
- 30. 符合太多協議的類?
我爲做什麼,現在只是忽視的事實是這一類將是有益的對於多於一個類而言,只需將它用於SCNRenderer。我認爲編寫實用函數的路線可能是一條路。我可能會讓他們在某些實用程序類上使用類方法。 – 2013-02-25 20:47:02
是啊...回想一下NSObject的想法,沒有太多的收穫是很奇怪的... – 2013-02-25 21:00:15