Ответ 1
Работает по назначению.
…Objects:
и forKeys:
должны быть выровнены, поскольку они составляют часть одной и той же сигнатуры метода.
Может быть, проще форматировать свой код, если вы используете новый синтаксис литерала объекта:
- (int)minBrokenPieces {
NSDictionary *mapping = [NSDictionary dictionaryWithObjects:@[@"3", @"4", @"4", @"5", @"6", @"7", @"8"]
forKeys:[Note types]];
[(NSString *)mapping[self.note.type] integerValue];
}
Что касается самого кода, представляется немного опасным определять эти константы в одном месте и типы примечаний в другом месте. Кроме того, зачем использовать строки, когда NSNumbers хватит?
(Этот код предполагает, что эта функция вызывается только из одного потока).
- (int)minBrokenPieces {
static NSDictionary *mappings;
if (!mappings) {
mappings = @{
noteType1 : @3,
noteType2 : @4,
noteType3 : @4,
noteType4 : @5,
noteType5 : @6,
noteType6 : @7,
noteType7 : @8,
};
}
NSAssert(mappings[self.note.type] != nil, @"Used a note type for which there is no minBrokenPieces defined");
return [mappings[self.note.type] intValue];
}