私のアプリでは、他のクラスで一連のコードを呼び出さなければならない場所がいくつかあります。私は通常、プロトコルを使用してそうします
// Teacher.m
@protocol TeacherProtocol
- (void)assignHomeWork;
- (void)respondToAssingment;
@end
for (Student *student in self.studentInClass) {
[student assignHomeWork];
}
// Student.m <TeacherProtocol>
- (void)assignHomeWork {
[self receivedAssignmentPaper];
}
// Nerd.m : Student
- (void)assignHomeWork {
[super assignHomeWork];
[self listenWithAttention];
}
// Douchebag.m : Student
- (void)assignHomeWork {
[super assignHomeWork];
[self listenToHisIPod];
}
// Blonde.m : Student
- (void)assignHomeWork {
[super assignHomeWork];
[self makeUp];
}
上記の例では、OK であり、理にかなっています。しかし、場合によっては、クラスが別のクラスにメッセージを送信する必要があり、他のクラスがこのメッセージを受信することはありません。
// Room.m
- (IBAction)mainSwitchWasToggle:(id)sender {
[self.mainLightBulb toggle];
}
// MainLightBulb.m
- (void)toggle {
if ([self.bulb isTurnOn]) {
[self.bulb turnOff];
} else {
[self.bulb turnOn];
}
}
問題は、toggleを Room のオブジェクトのプロトコルにするか、このように public メソッドのままにするかです。他の影響はありますか?