意図したとおりに動作します。
…Objects:
forKeys:
これらは同じメソッド シグネチャの一部を形成するため、整列する必要があります。
新しいオブジェクト リテラル構文を使用すると、コードのフォーマットが簡単になる場合があります。
- (int)minBrokenPieces {
NSDictionary *mapping = [NSDictionary dictionaryWithObjects:@[@"3", @"4", @"4", @"5", @"6", @"7", @"8"]
forKeys:[Note types]];
[(NSString *)mapping[self.note.type] integerValue];
}
コード自体に関しては、これらの定数を 1 か所で定義し、ノート タイプを別の場所で定義するのは少し危険に思えます。また、NSNumbers で十分なのに、なぜ文字列を使用するのでしょうか?
(このコードは、この関数が 1 つのスレッドからのみ呼び出されることを前提としています)。
- (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];
}