Итак, я довольно новичок в объекте c, и я создаю класс согласования, внутри класса у меня есть метод, который добавляет слово из книги в aa _ListofPtrsToUniqueWords, uniqueWord - это еще один класс, который я создал для хранения каталогизируемого слова, в c++ мой метод Добавляет UniqueWord к массиву уникальных слов, если он уже существует, он пропускает слово, но он добавляет номер строки в список _CurrentLineArray, это метод, который я использовал в c++
/* Attempts to add a word to the concordance. If it already exists, the existing entry is updated with the new line. */
void Concordance::add(const string word, const int line)
{
int insertion, index;
UniqueWord *uw = new UniqueWord(word, line);//creates the uniqueWord object
insertion = newIndex(*uw, index);//figures out where my word belongs in my array to be alphabetized
if (insertion == -1)
{
// The word already exists - add a line number.
delete uw;
ListOfUniqueWordsPtrs[index]->addLine(line);//I'm trying to do this in Objective C.
//My friend recommended i do this but i never asks what exactly does it do, addLine is a Unique word method
}
else
{
ListOfUniqueWordsPtrs.insert(ListOfUniqueWordsPtrs.begin() + insertion, uw);
}
}
Теперь я пытаюсь сделать то же самое в Objective C, но я не понимаю, что этот символ делает "->", мой друг просто рекомендовал мне это сделать, но я не понимаю, что он делает, и как я могу это вставить в Цель C
-(void) add:(NSString *)currentWordBeingCatalog and:(NSNumber*)CurrentLineNumber{
NSInteger insertion, index=0;
UniqueWord *CurrentWord=[[UniqueWord alloc] initWithString:currentWordBeingCatalog andline:CurrentLineNumber];
insertion=[self NewIndexToFindOutIf:CurrentWord is:[NSNumber numberWithLong:index]];
if(insertion==-1){
/*If the word already exist, it would delete the word and add the line number to the _linenumber NSMutableArray*/
CurrentWord=NULL;
[_ArrayOfPtrsToUniqueWords objectAtIndex:index]->[CurrentWord addALineNumberToCurrentLineNumberArray:CurrentLineNumber]];//This is where i'm trying to figure out what to do
}else{
[_ArrayOfPtrsToUniqueWords insertObject:CurrentWord atIndex:(0+insertion)];
}
}
Надеюсь, я дам вам ребята достаточно информации об этом коде, спасибо
Это синтаксис, который вы ищете:
[[_ArrayOfPtrsToUniqueWords objectAtIndex:index] addALineNumberToCurrentLineNumberArray:CurrentLineNumber];
... то есть вы просите массив вернуть один из его элементов, а затем вы просите, чтобы этот элемент добавлял номер строки.
Вы можете сломать это, если хотите:
UniqueWord *existingWord = [_ArrayOfPtrsToUniqueWords objectAtIndex:index];
[existingWord addALineNumberToCurrentLineNumberArray:CurrentLineNumber];
Вы также можете использовать NSArray
массива непосредственно в NSArray
и NSMutableArray
, поэтому если _ArrayOfPtrsToUniqueWords
является NSMutableArray
, вы можете сделать это:
UniqueWord *existingWord = _ArrayOfPtrsToUniqueWords[index];
[existingWord addALineNumberToCurrentLineNumberArray:CurrentLineNumber];
или это:
[_ArrayOfPtrsToUniqueWords[index] addALineNumberToCurrentLineNumberArray:CurrentLineNumber];
->
делает что-то похожее в Objective-C на то, что он делает в C++, помещается после указателя на объект для доступа к его переменным экземпляра (в C++ он также используется для вызова методов, тогда как в Objective- C используется синтаксис [instance methodName]
). Свойства обычно предпочтительнее ->
нотация в Objective-C. Это использование в вашем коде кажется ошибочным, rob mayoff сделал довольно хорошую работу по его исправлению.
[[_ArrayOfPtrsToUniqueWords objectAtIndex:index] addALineNumberToCurrentLineNumberArray:CurrentLineNumber]]
Вы не хотите->
. Вы получаете объект черезobjectAtIndex
, затем вызываете его, добавляя вокруг него еще один набор[]
и добавляя имя сообщения. Посмотрите на[[UniqueWord alloc] initWithString...
в качестве примера.