HOM с целью C - PullRequest
       29

HOM с целью C

0 голосов
/ 12 апреля 2010

Я новичок в Objective-C, но я попытался использовать HOM ( сообщение более высокого порядка ), чтобы перебрать NSArray и добавить строку к каждому элементу.

Вот мой код:

void print( NSArray *array ) {
    NSEnumerator *enumerator = [array objectEnumerator];
    id obj;

    while ( nil!=(obj = [enumerator nextObject]) ) {
        printf( "%s\n", [[obj description] cString] );
    }
}


int main( int argc, const char *argv[] ) {
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 NSArray *names = [[NSArray alloc] init];
 NSArray *names_concat = [[NSArray alloc] init];
 names = [NSArray arrayWithObjects:@"John",@"Mary",@"Bob",nil];
 names_concat = [[names collect] stringByAppendingString: @" Doe"];

 print(names_concat);
 [pool release];
}

Что не так с этим кодом?

Мой компилятор ( gcc ) говорит, что NSArray может не отвечать на "-collect"

1 Ответ

1 голос
/ 13 апреля 2010

Поскольку метод -collect не является частью стандартной библиотеки Objective-C!

Для начала вам нужно получить библиотеку и добавить ее в свой проект. См. статью в CocoaDev . collect см. В этой статье блога .

Начиная с 10.6, Apple добавила некоторые методы к NSArray, которые принимают блоки (или другими словами замыкания). Смотрите документацию NSArray и ищите слова block.

Кстати, в довольно не связанной точке, , пожалуйста, не используйте метод cString. Это не рекомендуется! См. Документация NSString . cString очень плохо относится к кодировке символов. Я знаю, что вы используете его только для целей отладки, но я не хочу, чтобы вы привыкли использовать устаревшие методы в целом, особенно в отношении методов, касающихся кодирования.

OS X в целом является ОС, очень дружественной ко многим кодировкам, но как восточноазиатский я видел, что многие замечательные программы ведут себя плохо только потому, что программисты использовали cString и т. Д ... Все работает, пока вы используете устаревшую методы. Извините за добавление постороннего комментария: p

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...