我更有信心使用C ++而不是客观c,我只是有一个愚蠢的问题,试图比较两个对象(我正在构建的UniqueWord类)。我一直收到错误, 期待一种;这是一个基本问题,但我也想解释一下我是怎么做错的,这就是我用C ++写的。工作得很好
private:
vector <int> LineNumbers;
string wordCatalog;// the current word in the line number
int newIndex(const int);
public:
UniqueWord(const string,const int);//creates the unique word object
~UniqueWord(void);
void addLine(const int);
static int compare(const UniqueWord&, const UniqueWord&);//my issue here
string toString() const;
现在我的问题是在Objective C中输入这个,我对Objective-C中的类很新,所以对我来说这就是我在Objective_c中输入的内容
@interface UniqueWord : NSObject
@property NSMutableArray *LineNumbers;
@property NSString *wordCatalog;
UniqueWord *UWord(const NSString*, const int);//creates a unique word object
int newIndex(const int);
-(void) addLine:(const int)line;
-(static NSInteger) compare:(UniqueWord *self)a with:(UniqueWord *self)b;//my issue
-(NSString*) toString;
@end
我真的很感激解释基本的语法规则(用现代语言解释)所以下次我不会遇到这个麻烦,谢谢。再一次,我对Objective C不太自信
在旁注可以有人告诉我,如果我的uniqueWord构造函数对吗?它说//创建一个独特的单词对象
答案 0 :(得分:3)
Objective-C中没有static
个方法 - 你需要一个类方法。将-
替换为声明前面的+
,如下所示:
+(NSInteger) compare:(UniqueWord *self)a with:(UniqueWord *self)b;
类方法类似于C ++静态成员函数,但由于方法调度是在Objective-C中更加动态地实现的,因此您可以在派生类中为它们提供覆盖。
上面会编译。但是,这将不成为Objective-C的惯用语,因为Cocoa使用NSComparisonResult
而不是NSInteger
作为比较方法的返回类型:
+(NSComparisonResult) compare:(UniqueWord *self)a with:(UniqueWord *self)b;
此外,C ++的构造函数是通过指定的初始化器实现的:这个
UniqueWord *UWord(const NSString*, const int);
应如下所示:
-(id)initWithString:(NSString*)str andIndex:(NSInteger)index;
和/或像这样:
+(id)wordWithString:(NSString*)str andIndex:(NSInteger)index;
答案 1 :(得分:1)
我认为更好的建议是实现实例compare:
方法。 A good answer is here。
有充分的理由这样做,具体来说,您要对新的compare:
方法做的下一件事就是排列一系列独特的单词。 @dasblinkenlight建议的类方法(具有无可挑剔的语法)将迫使您写下自己的排序。实例compare:
提供了紧凑且可能更有效的替代方案:
[myArrayFullOfUniqueWords sortUsingSelector:@selector(compare:)];