私はブロックプログラミングに頭を悩ませようとしていますが、現在この問題で立ち往生しています
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);
});
2行目では、ブロックパラメータ^(const void *l, const void *r)
、そこからパラメータ値を取得しています。
Apple Block ProgrammingTopicsのドキュメントから:
ココアのブロック
Cocoaフレームワークのいくつかのメソッドは、引数としてブロックを取ります。通常は、オブジェクトのコレクションに対して操作を実行するか、操作の終了後にコールバックとして使用します。次の例は、NSArrayメソッドsortedArrayUsingComparatorでブロックを使用する方法を示しています。このメソッドは、単一の引数、つまりブロックを取ります。説明のために、この場合、ブロックはNSComparatorローカル変数として定義されています。
「この場合、ブロックはNSComparatorローカル変数として定義されています」の意味は何ですか?
これは提供されているコードサンプルです
NSArray *stringsArray = @[ @"string 1",
@"String 21",
@"string 12",
@"String 11",
@"String 02" ];
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch |
NSNumericSearch |
NSWidthInsensitiveSearch |
NSForcedOrderingSearch;
NSLocale *currentLocale = [NSLocale currentLocale];
NSComparator finderSortBlock = ^(id string1, id string2) {
NSRange string1Range = NSMakeRange(0, [string1 length]);
return [string1 compare:string2
options:comparisonOptions
range:string1Range
locale:currentLocale];
};
NSArray *finderSortArray = [stringsArray sortedArrayUsingComparator:finderSortBlock];
NSLog(@"finderSortArray: %@", finderSortArray);
パラメータ値はどこで^(id string1, id string2)
取得されますか?