私が読んでいる本の中で、彼はメインファイルでカテゴリを作成する方法を説明していますが、別のファイルでこれを行う方法を理解しようとしています..
「MathOperations」という Fraction クラスのカテゴリを作成したいので、Fraction+MathOperations という名前の新しい .h と .m を開きました。これが規則であることはわかっているからです。
Fraction.hです
#import "Fraction.h"
@interface Fraction : NSObject
@property int numerator, denumerator;
-(void) print: (BOOL) test;
-(void) setTo: (int) n over: (int) d;
-(void) reduce;
-(double) convertToNum;
-(id) addFrac:(id)f;
-(void) justPrint;
-(id) initWith:(int)n over:(int)f;
+(Fraction *) allocF;
+(int) count;
+(int) gCounter;
@end
Fraction+MathOperations.h
#import "Fraction.h"
@interface Fraction (MathOperations)
-(Fraction *) add: (Fraction *) f;
-(Fraction *) substract: (Fraction *) f;
-(Fraction *) multiply: (Fraction *) f;
-(Fraction *) divide: (Fraction *) f;
@end
Fraction+MathOperations.m
#import "Fraction.h"
@implementation Fraction (MathOperations)
-(Fraction *)add:(Fraction *)f
{
extern int gCounter;
Fraction *result = [[Fraction alloc] init];
result.numerator = numerator * f.denumerator + denumerator * f.numerator;
result.denumerator = denumerator * f.denumerator;
[result reduce];
++gCounter;
return result;
}
-(Fraction *)substract:(Fraction *)f
{
Fraction *result = [[Fraction alloc] init];
result.numerator = numerator * f.denumerator - denumerator * f.numerator;
result.denumerator = denumerator * f.denumerator;
//[result reduce];
return result;
}
-(Fraction *)multiply:(Fraction *)f
{
Fraction *result = [[Fraction alloc] init];
result.numerator = numerator * f.numerator;
result.denumerator = denumerator * f.denumerator;
//[result reduce];
return result;
}
-(Fraction *)divide:(Fraction *)f
{
Fraction *result = [[Fraction alloc] init];
result.numerator = numerator * f.denumerator;
result.denumerator = denumerator * f.numerator;
//[result reduce];
return result;
}
@end
明らかに、変数が宣言されていないという一連のエラーが発生するため、何か間違ったことを宣言しています..また、元の Fraction クラスで新しいインターフェイスと実装を宣言する方が合理的ですか?
エラー:
Fraction クラスには、「numerator」と「denumerator」というプロパティがありますが、それらは meth 実装ファイル tnx で宣言されていないようです