Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Присваивание  блока Objective-C

0

Теперь присвоим значение нашей новой переменной. Значение блочной переменной всегда представляет собой набор инструкций в фигурных скобках. Включите в файл main.m следующий фрагмент:

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

{

@autoreleasepool {

// создание массива строк, из которых удаляются гласные,

// и контейнера для новых строк

NSArray *oldStrings = [NSArray arrayWithObjects:

@"Sauerkraut", @"Raygun", @"Big Nerd Ranch",

@"Mississippi", nil]; NSLog(@"old strings: %@", oldStrings);

NSMutableArray *newStrings = [NSMutableArray array];

// создание списка символов, удаляемых из строки NSArray *vowels = [NSArray arrayWithObjects:

@"a", @"e", @"i", @"o", @"u", nil];

// объявление блочной перменной

void (^devowelizer)(id, NSUInteger, BOOL *);

// присваивание блока переменной

devowelizer = ^(id string, NSUInteger i, BOOL *stop) {

NSMutableString *newString = [NSMutableString

stringWithString:string];

// перебор массива гласных и замена всех вхождений

// элементов пустой строки for (NSString *s in vowels) {

NSRange fullRange = NSMakeRange(0, [newString length]); [newString replaceOccurrencesOfString:s

withString:@"" options:NSCaseInsensitiveSearch range:fullRange];

}

[newStrings addObject:newString];

}; // конец присваивания блока

}

return 0;

}

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

Итак, мы создали блок (набор инструкций) и присвоили его блочной переменной devowelizer. Обратите внимание: присваивание блока завершается символом «;», как и присваивание любой другой переменной.

Объявление devowelizer можно совместить с присваиванием, как и в случае с

любой другой переменной:

void (^devowelizer)(id, NSUInteger, BOOL *) = ^(id string, NSUInteger i, BOOL

*stop) {

NSMutableString *newString = [NSMutableString stringWithString:string];

// перебор массива гласных и замена всех вхождений

// элементов пустой строки for (NSString *s in vowels) {

NSRange fullRange = NSMakeRange(0, [newString length]); [newString replaceOccurrencesOfString:s

withString:@"" options:NSCaseInsensitiveSearch range:fullRange];

}

[newStrings addObject:newString];

};

Как и в предыдущем варианте, здесь объявляется блочная переменная с именем devowelizer, которая получает три аргумента и не возвращает ничего. Затем мы создаем блок и сохраняем его в devowelizer.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии