2013-06-19 2 views
0

Мне часто требуется получить 1-й объект, принадлежащий набору. (С помощью этого объекта в качестве представителя этого множества.)Оператор коллекции объектов для @firstObject Кодировка ключа KVC

Я предвижу оператор Коллекции объектов, сродни

@unionOfObjects 

НО ясно

@firstObject 

Можно ли создать такую ​​коллекцию оператор!

ответ

1

В настоящее время нет способа определить пользовательские операторы коллекции. Однако, из-за какой-то внутренней магии есть забавное решение:

NSSet *testSet = [NSSet setWithArray:@[@"one", @(1)]]; 

    id object = [testSet valueForKey:@"@anyObject"]; 
    NSLog(@"anyObject (%@): %@", NSStringFromClass([object class]), object); 

UPD: Забыла упомянуть еще один удобный трюк: вы можете использовать @lastObject на NSArray!

+0

'anyObject' может работать. Благодарю. плохо дать ему выстрел. при первом просмотре, если у вас есть nsset, почему бы просто не выполнить [testSet anyObject] по сравнению с [testSet valueForKey @ "anyObject"]. по существу, похоже, что некоторые методы доступа (lastObject, anyObject) для Sets and Arrays являются ключевыми значениями. –

+0

@GabeRainbow, ваш вопрос касался использования операторов коллекции. Вы можете определенно использовать anyObject. Warning, valueForKey: @ "anyObject" не будет работать. valueForKey: @ "@ anyObject" будет. Это связано с некоторыми деталями реализации операторов сбора. – Anton

+0

спасибо за разъяснение. я отметил, что @ "" неправильно написано в документах Apple, что должно вызвать некоторые головные боли. Конечно, anyObject будет работать для моей цели, так как Im ищет какой-либо репрезентативный объект в наборе, а не какой-то конкретный, в первую очередь. –