Категории Objective-C: Метод не вызван - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь изучить основы Objective-C с помощью чтения «Learning Objective-C 2.0». Это упражнение по категориям, в котором вас попросили добавить метод к NSString с помощью использования категорий.Моя простая программа ниже.он (должен) взять строку и затем изменить порядок слов.

Main

#import <Foundation/Foundation.h>
#import "CatNSString.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {

    NSString *test = @"Dog bites Man";
    NSString *test1 = nil;

    test1 = [test1 reverseWords: test];

    NSLog(@"%@ : %@", test, test1);

}
return 0;

}

Интерфейс

#import <Foundation/Foundation.h>

@interface NSString (CatNSString)

- (NSString*) reverseWords:(NSString*)string;

@end

Реализация

#import "CatNSString.h"

@implementation NSString (CatNSString)

- (NSString*) reverseWords: (NSString*) string
{
    NSString *stringReturn = nil;
    NSArray *arrayString = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    stringReturn = [string stringByAppendingString:@"hello"];


    for (NSString *word in arrayString)
    {
        NSString *stringTmp1 = word;
        NSString *stringTmp2 = stringReturn;
        stringReturn = [stringTmp1 stringByAppendingString:stringTmp2];
        NSLog(@"stringTmp1: %@", stringTmp1);

    }

    return stringReturn;
}


@end

Компилируется, но программа действует так, как будто метод никогда не вызывается.Если я помещаю вызов NSLog в методе, вывод на консоль отсутствует.Кто-нибудь может увидеть, что я не делаю, что я должен делать?

1 Ответ

0 голосов
/ 25 сентября 2018

Вы только что сделали это неправильно.

Вот правильный способ определения категории:

@interface NSString (CatNSString)
-(NSString *)reverse;
@end

@implementation NSString (CatNSString)
-(NSString*)reverse {
    // `Self` keyword will refer to your original string, no need to pass it as a parameter
    NSArray *words = [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    return [[[words reverseObjectEnumerator] allObjects] componentsJoinedByString:@" "];
}
@end

И в своем основном коде выполните следующее:

NSString *test = @"Dog bites Man";
NSLog(@"%@", [test reverse]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...