您的位置:首页 > 其它

OC分类和协议

2015-09-13 00:00 375 查看
//
//  ViewController.m
//  OC11分类和协议
//
//  Created by Zoujie on 15/9/13.
//  Copyright (c) 2015年 Zoujie. All rights reserved.
//

#import "ViewController.h"
#import "Fraction.h"
#import "GraphicObject.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>//协议
{
id currentObject;
}

@end
id <Drawing> currentObject;

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// 分类
Fraction *a = [Fraction new];
Fraction *b = [Fraction new];
Fraction *result;
Fraction *tempFraction = [Fraction new];
Fraction *intvertResult = [Fraction new];

[a setTo:1 over:3];
[b setTo:2 over:5];

[a print]; NSLog(@"    +");[b print];NSLog(@"-----");
result = [a add:b];
[result print];
NSLog(@"\n");

[a print]; NSLog(@"    -");[b print];NSLog(@"-----");
result = [a sub:b];
[result print];
NSLog(@"\n");

[a print]; NSLog(@"    *");[b print];NSLog(@"-----");
result = [a mul:b];
[result print];
NSLog(@"\n");

[a print]; NSLog(@"    /");[b print];NSLog(@"-----");
result = [a div:b];
[result print];
NSLog(@"\n");

NSLog(@"----------------------------------");
intvertResult  = [tempFraction invert:result];//对象接受  返回值   (小坑)
[intvertResult print];
NSLog(@"\n");

//    协议 代理

if ([currentObject conformsToProtocol:@protocol(Drawing)] == YES)//conformsToProtocol 检查某个方法是否遵循某项协议
{
[currentObject outline];
};
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end


//
//  GraphicObject.h
//  OC11分类和协议
//
//  Created by Zoujie on 15/9/13.
//  Copyright (c) 2015年 Zoujie. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol Drawing//协议名称
-(void) paint;
-(void) erase;

@optional//可选择是否实现
-(void) outline;
@end

@interface GraphicObject : NSObject <Drawing>

@end


//
//  GraphicObject.m
//  OC11分类和协议
//
//  Created by Zoujie on 15/9/13.
//  Copyright (c) 2015年 Zoujie. All rights reserved.
//

#import "GraphicObject.h"

@implementation GraphicObject

@end


//
//  Fraction.h
//  OC11分类和协议
//
//  Created by Zoujie on 15/9/13.
//  Copyright (c) 2015年 Zoujie. All rights reserved.
//

#import <Foundation/Foundation.h>
@interface Fraction : NSObject
@property int numerator,denominator;

-(void) setTo:(int) n over:(int) d;
//-(Fraction *) add:(Fraction *) f;
-(void) reduce;
-(double) convertToNum;
-(void) print;
@end

//分类
#import "Fraction.h"

@interface Fraction (MathOps)//为Fraction类定义新的分类,名称为MathOps

-(Fraction *) add:(Fraction *)f;
-(Fraction *) mul:(Fraction *)f;
-(Fraction *) sub:(Fraction *)f;
-(Fraction *) div:(Fraction *)f;
//11.5
-(Fraction *) invert:(Fraction *)f;//结果倒置
@end


//
//  Fraction.m
//  OC11分类和协议
//
//  Created by Zoujie on 15/9/13.
//  Copyright (c) 2015年 Zoujie. All rights reserved.
//

#import "Fraction.h"

@implementation Fraction

-(void)setTo:(int)a over:(int)b
{
_numerator = a;
_denominator = b;

}

-(void)print
{
NSLog(@"%d/%d",_numerator,_denominator);
}

-(void) reduce
{
//局部变量
int u = _numerator;
int v = _denominator;
int temp;

while (v != 0) {
temp = u % v;
u = v ;
v = temp ;
}
_numerator /= u;
_denominator /= u;
}

-(double)convertToNum
{
if (_denominator != 0)
{
return (double) _numerator / _denominator;
}
else
{
return NAN;
}
}
@end

@implementation Fraction (MathOps)

//相加
-(Fraction *) add:(Fraction *)f
{
Fraction *result = [Fraction new];
result.numerator = (_numerator *f.denominator) + (_denominator * f.numerator);
result.denominator = _denominator * f.denominator;
[result reduce];
return result;
}

//相减
-(Fraction *) sub:(Fraction *)f{
Fraction *result = [Fraction new];
result.numerator = (_numerator * f.denominator) - (_denominator *f.numerator);
result.denominator = _denominator *f.denominator;
[result reduce];
return result;
}
//相乘
-(Fraction *) mul:(Fraction *)f{
Fraction *result = [Fraction new];
result.numerator = _numerator *f.numerator;
result.denominator = _denominator *f.denominator;
[result reduce];
return result;
}
//相除
-(Fraction *) div:(Fraction *)f{
Fraction *result = [Fraction new];
result.numerator = _numerator *f.denominator;
result.denominator  = _denominator * f.numerator;
[result reduce];
return result;
}

//结果倒置
-(Fraction *) invert:(Fraction *)f
{
Fraction *result = [Fraction new];
result.numerator = f.denominator ;
result.denominator = f.numerator;
[result reduce];
return result;
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: