Видео урок находится здесь.
Речь в этом уроке идет про протоколы в Objective c,
Кратенький конспект (для себя).
Протокол объявляется в отдельном .h файле, который потом импортируется в нужные классы.
@protocol имя протокола <[имя родительского протокола] (опционально)>
@required - методы обязательные для реализации в классах поддерживающих протокол
@optional - методы не обязательные для реализации в классах поддерживающих протокол
методы ...
свойства
@end
Если класс поддерживает протокол, то в объявлении добавляется:
@interface ИмяКласса: NSObject <ИмяПротокола>
Нужно самостоятельно следить, чтобы все обязательные методы и свойства протокола были реализованы в классе, который поддерживает этот протокол, т.к. в противном случае программа выдаст ошибку.
Можно сделать проверку функцией conformsToProtocol поддерживает ли объект класса все обязательные методы и свойства протокола:
if ([obj conformsToProtocol:@protocol(TAPatient)]) - объект obj реализует ли полностью протокол - TAPatient? (да,нет)
Проверить реализует ли объект опциональные (@optional) методы и свойства протокола можно функцией respondsToSelector:
if ([obj respondsToSelector:@selector(howIsYouJob)]) реализует ли объект obj метод howIsYouJob? (да/нет).
Файлы проекта урока 7 Протоколы
Домашнее задание к уроку 7.
Задание такое:
1. Реализуйте протоколы Jumpers, Swimmers, Runners. Каждый протокол должен иметь пару свойств, например скорость или максимальная высота прыжка и пару методов, например прыгать или плыть, нырять и тд. Включите фантазию!!!
2. Часть методов делайте обязательными (например у пловцов обязательный метод это плыть а у бегунов - бежать, логично?), а другую часть не обязательными.
3. Используйте классы из задания про массивы, там где у вас люди и животные. Например у кенгуру и у особых спортсменов реализуйте протокол Jumpers, тоже самое с другими протоколами. Пусть каждый протокол будет реализован как некоторыми классами животных, так и некоторыми классами людей.
4. Положите всех в одни массив. Тех кто прыгает заставьте прыгать и рассказывать про свои свойства. Причем у некоторых объектов пусть будут одни необязательные свойства или методы, а у других другие. Тот кто бегает пусть бегает, а тот кто плавает, пусть плавает. Тот кто ничего не делает должен быть выведен на экран как лодырь :)
5. Сделайте так чтобы один какой-то класс мог и бегать и прыгать и плавать и посмотрите как он себя поведет в цикле.
Вот код теста классов и протоколов (сами классы можно посмотреть в файлах проекта):
TADog * dog=[[TADog alloc] init];
dog.speedRunning=10;
dog.smokerOrNotSmoker=notSmoker;
dog.depthDiving=1;
dog.speedSwimming=10;
TABodyBilder *bilder=[[TABodyBilder alloc]init];
bilder.speedRunning=10;
bilder.smokerOrNotSmoker=smoker;
TACat *cat=[[TACat alloc]init];
cat.heightJump=100;
cat.widthJump=150;
cat.speedRunning=3;
cat.smokerOrNotSmoker=notSmoker;
TABaiker *baiker=[[TABaiker alloc]init];
TASwimmer *swimmer=[[TASwimmer alloc]init];
swimmer.heightJump=120;
swimmer.widthJump=200;
swimmer.depthDiving=5;
swimmer.speedSwimming=15;
swimmer.speedRunning=15;
swimmer.smokerOrNotSmoker=notSmoker;
NSArray *array=[NSArray arrayWithObjects:dog,bilder,cat,baiker,swimmer, nil];
int count;
for (NSObject <TARunners,TAJumpers,TASwimmers> *obj in array) {
count=0;
if ([obj conformsToProtocol:@protocol(TASwimmers)]) {
[obj Swim];
}
else
{
count++;
}
if ([obj conformsToProtocol:@protocol(TARunners)]) {
[obj Run];
}
else
{
count++;
}
if ([obj conformsToProtocol:@protocol(TAJumpers)]) {
[obj Jump];
}
else
{
count++;
}
if (count==3) {
NSLog(@"This is bummer");
}
}
Вот вывод:
Dog Swim. Swimming speed: 10. Diving depth 1
Dog Run. Run speed: 10 and no smoking
Bodybilder Run. Run speed: 10 and smoke cigaret
Cat Run. Run speed: 3 and no smoking
Cat jump. Height jump: 100. Width jump: 150
This is bummer
Swimmer Swim. Swimming speed: 15. Diving depth 5
Swimmer Run. Run speed: 15 and no smoking
Swimmer jump. Height jump: 120. Width jump: 200
Файлы с домашним заданием №7
Речь в этом уроке идет про протоколы в Objective c,
Кратенький конспект (для себя).
Протокол объявляется в отдельном .h файле, который потом импортируется в нужные классы.
@protocol имя протокола <[имя родительского протокола] (опционально)>
@required - методы обязательные для реализации в классах поддерживающих протокол
@optional - методы не обязательные для реализации в классах поддерживающих протокол
методы ...
свойства
@end
Если класс поддерживает протокол, то в объявлении добавляется:
@interface ИмяКласса: NSObject <ИмяПротокола>
Нужно самостоятельно следить, чтобы все обязательные методы и свойства протокола были реализованы в классе, который поддерживает этот протокол, т.к. в противном случае программа выдаст ошибку.
Можно сделать проверку функцией conformsToProtocol поддерживает ли объект класса все обязательные методы и свойства протокола:
if ([obj conformsToProtocol:@protocol(TAPatient)]) - объект obj реализует ли полностью протокол - TAPatient? (да,нет)
Проверить реализует ли объект опциональные (@optional) методы и свойства протокола можно функцией respondsToSelector:
if ([obj respondsToSelector:@selector(howIsYouJob)]) реализует ли объект obj метод howIsYouJob? (да/нет).
Файлы проекта урока 7 Протоколы
Домашнее задание к уроку 7.
Задание такое:
1. Реализуйте протоколы Jumpers, Swimmers, Runners. Каждый протокол должен иметь пару свойств, например скорость или максимальная высота прыжка и пару методов, например прыгать или плыть, нырять и тд. Включите фантазию!!!
2. Часть методов делайте обязательными (например у пловцов обязательный метод это плыть а у бегунов - бежать, логично?), а другую часть не обязательными.
3. Используйте классы из задания про массивы, там где у вас люди и животные. Например у кенгуру и у особых спортсменов реализуйте протокол Jumpers, тоже самое с другими протоколами. Пусть каждый протокол будет реализован как некоторыми классами животных, так и некоторыми классами людей.
4. Положите всех в одни массив. Тех кто прыгает заставьте прыгать и рассказывать про свои свойства. Причем у некоторых объектов пусть будут одни необязательные свойства или методы, а у других другие. Тот кто бегает пусть бегает, а тот кто плавает, пусть плавает. Тот кто ничего не делает должен быть выведен на экран как лодырь :)
5. Сделайте так чтобы один какой-то класс мог и бегать и прыгать и плавать и посмотрите как он себя поведет в цикле.
Вот код теста классов и протоколов (сами классы можно посмотреть в файлах проекта):
TADog * dog=[[TADog alloc] init];
dog.speedRunning=10;
dog.smokerOrNotSmoker=notSmoker;
dog.depthDiving=1;
dog.speedSwimming=10;
TABodyBilder *bilder=[[TABodyBilder alloc]init];
bilder.speedRunning=10;
bilder.smokerOrNotSmoker=smoker;
TACat *cat=[[TACat alloc]init];
cat.heightJump=100;
cat.widthJump=150;
cat.speedRunning=3;
cat.smokerOrNotSmoker=notSmoker;
TABaiker *baiker=[[TABaiker alloc]init];
TASwimmer *swimmer=[[TASwimmer alloc]init];
swimmer.heightJump=120;
swimmer.widthJump=200;
swimmer.depthDiving=5;
swimmer.speedSwimming=15;
swimmer.speedRunning=15;
swimmer.smokerOrNotSmoker=notSmoker;
NSArray *array=[NSArray arrayWithObjects:dog,bilder,cat,baiker,swimmer, nil];
int count;
for (NSObject <TARunners,TAJumpers,TASwimmers> *obj in array) {
count=0;
if ([obj conformsToProtocol:@protocol(TASwimmers)]) {
[obj Swim];
}
else
{
count++;
}
if ([obj conformsToProtocol:@protocol(TARunners)]) {
[obj Run];
}
else
{
count++;
}
if ([obj conformsToProtocol:@protocol(TAJumpers)]) {
[obj Jump];
}
else
{
count++;
}
if (count==3) {
NSLog(@"This is bummer");
}
}
Вот вывод:
Dog Swim. Swimming speed: 10. Diving depth 1
Dog Run. Run speed: 10 and no smoking
Bodybilder Run. Run speed: 10 and smoke cigaret
Cat Run. Run speed: 3 and no smoking
Cat jump. Height jump: 100. Width jump: 150
This is bummer
Swimmer Swim. Swimming speed: 15. Diving depth 5
Swimmer Run. Run speed: 15 and no smoking
Swimmer jump. Height jump: 120. Width jump: 200
Файлы с домашним заданием №7
Комментариев нет:
Отправить комментарий