我在@protocol中使用了一個Object方法,但協議只支持方法聲明,有人可以幫我解釋如何將它與同一方法的方法定義連接起來(在哪裏編寫方法定義)。協議中的方法定義
Q
協議中的方法定義
0
A
回答
1
協議只是方法聲明的列表,沒有任何實現。它們可以用來將一組可能的(類)限制爲那些實現某個協議的類。
例如,如果您有GasStation
類,則可能需要限制可在該站加油的對象的類型(類)。當然,你可以簡單地要求對象是類Vehicle
的後代,就像這樣:
@interface GasStation : NSObject
- (void)refuel:(Vehicle *)vehicle;
@end
@implementation GasStation
- (void)refuel:(Vehicle *)vehicle {
[vehicle addFuel:100];
}
@end
,但這不會允許儲罐被填滿的實例。但是,允許傳遞任何類型的對象也是一個壞主意,因爲如果您通過Cat
的實例,則在嘗試向其發送addFuel:
消息時肯定會發生錯誤。
因此,你定義一個協議,該協議可充燃料類必須實現:
@protocol RefuelableThing
@required
- (void)addFuel:(float)fuel;
@end
現在你可以使用該協議來限制可以加油的對象類型:
@interface GasStation : NSObject
- (void)refuel:(NSObject<RefuelableThing> *)thing;
@end
一個Vehicle
會當然有一個方法addFuel:
,所以JerryCan
可以實現它自己的獨立版本,即使它不是Vehicle
。
0
一旦聲明協議,任何符合它的類都可以實現該協議中的方法。只需導入聲明協議的頭文件,將協議添加到該類的接口並在.m中實現讀取該主題的方法是一個很好的建議,btw
相關問題
- 1. 檢查協議方法被定義
- 2. 協議方法
- 3. 定義自定義協議
- 4. 協議中的方法
- 5. 自定義協議
- 6. 在協議中定義@property
- 7. 無法找到協議聲明自定義協議委託iphone
- 8. 協議方法的繼承
- 9. 方法聲明的協議?
- 10. 自定義協議的委託方法不是要求
- 11. 自定義協議的方法是不是在iPhone調用sdk
- 12. 自定義協議的設置委託干擾UIScrollViewDelegate方法
- 13. 自定義RS485協議
- 14. 自定義協議支持
- 15. 未找到協議定義
- 16. 重複協議定義
- 17. Pyside qwebview自定義協議
- 18. wp7中的自定義協議
- 19. 自定義協議中的XMPP錯誤
- 20. SCIM協議中的自定義資源
- 21. 協議緩衝區方法定義。傳入參數
- 22. 在Javascript中調用自定義協議
- 23. 在協議中定義NSArray常量
- 24. 在協議中的自定義類定義的錯誤
- 25. 爲VNC定義了哪些協議代碼? (RFB協議)
- 26. 在定義中應該與協議名稱相同的協議的文件名?
- 27. Rails的協會,未定義的方法
- 28. 無法讀取$ http.put中未定義的屬性「協議」
- 29. 在協議中創建委託方法
- 30. 的Android Jwebsocket自定義協議
我認爲你在這裏混淆了一些東西。你的意思是把方法*實現*放在哪裏? – DrummerB
您可能需要閱讀['protocol protocol'](http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/chapters/ocProtocols.html)以瞭解協議的使用方式。 – Joe
將'@class對象;'放在'@ protocol'聲明之上。 – basvk