------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———
/******************************************
* 今天对 “类别与扩展”进行学习.收获如下:
*
* 为已有的类扩展一些新的行为,可以使用继承,但有些时候继承并不是最好的选择。
* 比如:希望为 NSNumber类新增一些方法,但 NSNumber只是一个类簇的前端类,比如:通过[NSNumber numberWithInt:5]方法生成的
* NSNumber对象其实只是 NSNumber子类的实例。 那么即使为 NSNumber派生子类也没有不会影响这个对象。此时需要借助类别来实现。
* 那么即使为 NSNumber派生子类也没有不会影响这个对象。此时需要借助类别来实现。
* 通过使用类别,可以为现有类添加新方法,而且可以将类定义模块化地分布到多个相关文件中。
* 通常我们用“类名+类别名.h”和“类名+类别名.m”来为类别命名。
*
*
*******************************************/
代码实现:
#import <Foundation/Foundation.h>
@interface NSNumber (yunsuan) //使用类别为 NSNumber扩展四种运算
-(NSNumber*)add:(double)num2;
-(NSNumber*)substract:(double)num2;
-(NSNumber*)multiply:(double)num2;
-(NSNumber*)divide:(double)num2;
@end
#import "NSNumber+yunsuan.h"
@implementation NSNumber (yunsuan)
-(NSNumber*)add:(double)num2
{
return [NSNumber numberWithDouble: ([self doubleValue] + num2) ];
}
-(NSNumber*)substract:(double)num2
{
return [NSNumber numberWithDouble: ([self doubleValue] - num2) ];
}
-(NSNumber*)multiply:(double)num2
{
double a = [self doubleValue];
return [NSNumber numberWithDouble: (a * num2)];
}
-(NSNumber*)divide:(double)num2
{
double a = [self doubleValue];
return [NSNumber numberWithDouble: (a / num2) ];
}
@end
#import <Foundation/Foundation.h>
#import "NSNumber+yunsuan.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
NSNumber* a = [NSNumber numberWithDouble:15];
NSNumber* add = [a add:3.0];
NSNumber* substract = [a substract:5.0];
NSNumber* multiply = [a multiply:2.0];
NSNumber* divide = [a divide:2.5];
NSLog(@"%@",add);
NSLog(@"%@",substract);
NSLog(@"%@",multiply);
NSLog(@"%@",divide);
}
return 0;
}