Rom*_*use 2 objective-c categories
我正在研究一个包含类别的简单Objective-c程序.我的班.h:
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
@property int numerator, denominator;
-(void)setNumerator:(int)n andDenominator:(int)d;
@end
Run Code Online (Sandbox Code Playgroud)
在.m文件中我合成了我的numerator和denominator.在main.m我Fraction班级的创建类别中:
#import "Fraction.h"
@interface Fraction (MathOps)
-(Fraction *) add: (Fraction *) f;
@end
@implementation Fraction (MathOps)
-(Fraction *) add: (Fraction *) f
{
// To add two fractions:
// a/b + c/d = ((a*d) + (b*c)) / (b * d)
Fraction *result = [[Fraction alloc] init];
result.numerator = (numerator * f.denominator) +
(denominator * f.numerator);
result.denominator = denominator * f.denominator;
[result reduce];
return result;
}
@end
Run Code Online (Sandbox Code Playgroud)
但我的程序没有看到numerator和denominator类别的实现部分.错误"使用未声明的标识符'分子'(分母相同).我做错了什么?
使用属性而不是直接使用ivars:
result.numerator = (self.numerator * f.denominator) + (self.denominator * f.numerator);
result.denominator = self.denominator * f.denominator;
Run Code Online (Sandbox Code Playgroud)
实例变量对于您的类别是不可见的,因为它们未在Fraction的界面中声明 - 它们仅在您在实现中@synthesize它们时创建.这导致了另一种可能的解决方案,即在Fraction的接口中声明实例变量:
@interface Fraction : NSObject {
int numerator;
int denominator;
}
@property int numerator, denominator;
-(void)setNumerator:(int)n andDenominator:(int)d;
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |