對於學習(不實用 - 但)的目的,我想在NSDictionary上使用以下方法,讓我回到一組使用我定義的測試值的鍵。不幸的是,不知道如何指定謂詞。如何指定NSDictionary的keysOfEntriesPassingTest所需的塊對象/謂詞?
NSDictionary keysOfEntriesPassingTest:
- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate
比方說,例如我的所有值都NSURLs,我想拿回全部是在8080端口上這裏是我的編碼是刺的URL - 儘管它並沒有真正意義對我來說,這將會是正確的:
NSSet * mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
if([[obj port] isEqual: [NSNumber numberWithInt: 8080]]) {
return key;
}]
那是因爲我得到以下編譯器錯誤:
incompatible block pointer types initializing 'void (^)(struct objc_object *, struct objc_object *, BOOL *)', expected 'BOOL (^)(struct objc_object *, struct objc_object *, BOOL *)'
我缺少什麼?我會很欣賞在一些文檔中的指針,這些文檔詳細介紹了謂詞應該是的「塊對象」。
謝謝!
而且這是工作的代碼:
NSSet *mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop)
{
if ([[obj port] isEqual:[NSNumber numberWithInt: 8080]])
return YES;
else
return NO;
}];
感謝提問/回答;我在上面的「代碼有效」部分修正了一個錯字。 – petert 2011-04-14 09:49:54