黑马程序员技术交流社区
标题:
oc代理
[打印本页]
作者:
clinging
时间:
2016-4-26 17:48
标题:
oc代理
创建三个类,分别为(Animal,Dog,Person),其中Person和Dog需要继承Animal类
要求:
a:创建Animal类:必有属性:体重(单位是Kg)
b:创建Dog类:必有属性:状态(枚举类型:健康和生病两种状态)
c:创建Person类:必有属性:姓名
d:根据以下描述设计一套代理模式:实现一个照顾小狗的协议(protocol):当小狗的状态为生病的时候,小狗需要人类的照顾,让其状态变成健康
作者:
落寒
时间:
2016-4-27 18:19
Animal类
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@property(nonatomic,assign) double weight;
@end
复制代码
Person类
#import "Animal.h"
#import "DogDelegate.h"
@interface Person : Animal<DogDelegate>
@property(nonatomic,copy) NSString *name;
@end
#import "Person.h"
@implementation Person
-(void)cureDog{
NSLog(@"狗狗在%@的精心照顾下好了",_name);
}
@end
复制代码
作者:
落寒
时间:
2016-4-27 18:20
Dog类
#import "Animal.h"
#import "DogDelegate.h"
//枚举
typedef enum{
HEALTH,SICK
} Status;
@interface Dog : Animal
@property(nonatomic,assign) id<DogDelegate> delegate;
@property(nonatomic,assign) Status status;
//狗狗生病
-(void)dogSick;
@end
复制代码
Dog实现类
#import "Dog.h"
@implementation Dog
#pragma mark - 重写status的set方法
-(void)setStatus:(Status)status{
_status = status;
if (_status == SICK) {
[self dogSick];
}
}
-(void)dogSick{
NSLog(@"狗狗生病了");
[self cureDog];
}
-(void)cureDog{
[self.delegate cureDog];
}
@end
复制代码
协议类
@protocol DogDelegate <NSObject>
-(void)cureDog;
@end
复制代码
作者:
落寒
时间:
2016-4-27 18:23
测试代码
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 人
Person *p = [Person new];
p.name = @"小明";
p.weight = 55.0;
// 狗
Dog *d = [Dog new];
d.weight = 10.0;
d.delegate = p;
// 狗的状态
d.status = SICK;
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2