ブロックを始めよう 翻訳元
以下のセクションでは実践的な例を使ってブロックを始める手助けをします。
このページの最終更新:2010-02-28
ADCの最終更新:2009-10-19
ADCの最終更新:2009-10-19
目次
ブロックの宣言と使用(Declaring and Using a Block)
ブロック変数の宣言やブロックリテラルの始まり(Cでは一般に、; が式の終わりを意味します)を明示するには^演算子を使用します。これは以下の例で示さています。
int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; |
この例は下の図で説明しています。
図(外部リンク、英語)
ブロックは定義されたのと同じスコープの変数を利用できる言うことに注意してください。
ブロックを変数として宣言すれば、そのブロックは関数と全く同じに使うことができます。
図(外部リンク、英語)
ブロックは定義されたのと同じスコープの変数を利用できる言うことに注意してください。
ブロックを変数として宣言すれば、そのブロックは関数と全く同じに使うことができます。
int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; printf("%d", myBlock(3)); // prints "21" |
ブロックを直接使用する(Using a Block Directly)
多くの場合、ブロック変数を宣言する必要はありません。代わりに、引数として要求された所に、ブロックリテラルを単純に組み込んで書くことができます。以下の例ではqsort_b関数を使用しています。qsort_bは標準のqsort_r関数とよく似ていますが、最後の引数にブロックをとります。
char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" }; qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) { char *left = *(char **)l; char *right = *(char **)r; return strncmp(left, right, 1); }); // myCharacters is now { "Charles Condomine", "George", TomJohn" } |
Cocoaでのブロック(Blocks with Cocoa)
Cocoaフレームワーク?のいくつかのメソッドはブロックを引数としてとります。通常、オブジェクトのコレクションへ炉処理や、処理が終わった後のコールバックとして使用されます。以下の例では、NSArrayのsortedArrayUsingComparator:?メソッドでのブロックの使い方を示しています。このメソッドは一つの引数としてブロックをとります。この場合はブロックはNSComparator:?として定義されます。
NSArray *stringsArray = [NSArray arrayWithObjects: @"string 1", @"String 21", @"string 12", @"String 11", @"String 02", nil]; static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch | NSWidthInsensitiveSearch | NSForcedOrderingSearch; NSLocale *currentLocale = [NSLocale currentLocale]; NSComparator finderSort = ^(id string1, id string2) { NSRange string1Range = NSMakeRange(0, [string1 length]); return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale]; }; NSLog(@"finderSort: %@", [stringsArray sortedArrayUsingComparator:finderSort]); /* Output: finderSort: ( "string 1", "String 02", "String 11", "string 12", "String 21" ) |