ลองพิจารณาแอปพลิเคชันที่มีมุมมองที่ปรับแต่งเองสูงหรือซับซ้อน
เราจะมีวิธีการส่งตัวควบคุมมุมมองเฉพาะไปยัง UIView ประเภทใดประเภทหนึ่ง โดยที่ UIView นั้นประกอบด้วยมุมมองอื่นจำนวนหนึ่ง
มุมมองควรมีอินเทอร์เฟซเฉพาะโดเมนที่หลากหลาย ช่วยให้คอนโทรลเลอร์ทำงานได้โดยมีเลเยอร์ "กาว" บาง ๆ อยู่ระหว่างตัวควบคุมกับโมเดลที่มีเนื้อหาคล้ายกัน
ดังนั้นเราจึงแทนที่คุณสมบัติมุมมองของคอนโทรลเลอร์ของเราดังนี้:
@interface PlaybackViewController : UIViewController<StageLayoutDelegate, ControlPanelDelegate>
{
NSMutableArray* _sections;
LightingMode _lightingMode;
}
@property (nonatomic, strong) PlaybackView* view; // <------ Specific type of view
#pragma mark - injected
@property (nonatomic, strong) id<OscClient> oscClient;
@property (nonatomic, strong) AbstractStageLayoutView* stageLayoutView;
@end
Oververriding สมเหตุสมผลมากกว่าการกำหนดผู้เข้าถึงรายอื่น และฉันสามารถส่งข้อความไปยัง UIView ประเภทเฉพาะได้โดยไม่ต้องส่ง
ปัญหา: ปัญหาเดียวคือมันส่งผลให้เกิดคำเตือนคอมไพเลอร์:
ประเภทคุณสมบัติ 'PlaybackView *' เข้ากันไม่ได้กับประเภท 'UIView *' ที่สืบทอดมาจาก 'UIViewController'
. . และฉันชอบสร้างโค้ดที่ไม่มีคำเตือนใดๆ วิธีนี้จะทำให้คำเตือนที่ถูกต้องไม่พลาดโดยถูกฝังไว้ท่ามกลางคำเตือนอื่นๆ
คำถาม:
- มีวิธีระงับคำเตือนเฉพาะนี้หรือไม่
- เหตุใดจึงเป็นส่วนหนึ่งของการตั้งค่าเริ่มต้น ในเมื่อภาษา OO สมัยใหม่ส่วนใหญ่ยอมให้แทนที่คุณสมบัติหรือเมธอดในคลาสย่อยได้อย่างมีความสุข เพื่อที่จะส่งคืนคลาสย่อยที่เฉพาะเจาะจงมากขึ้นของประเภทที่ประกาศในซูเปอร์คลาส
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu" //YOUR CODE #pragma clang diagnostic pop
หรือ -Wall - person Andrea   schedule 05.05.2014