10

皆さん、私は次のことをしようとしています。「specialLevels」という配列 (NSArray) があります。その配列は次のようになります。

specialLevels = @[@2, @4, @6, @9];

これは int の配列である必要があります。int 'currentLevel' (basic int no object) も取得しました。

そして、 currentLevel が specialLevels の配列にあるかどうかを確認したいと思います。メソッド「containsObject」が存在することは知っていますが、これは私の場合は機能しません。

この場合、どうすることをお勧めしますか?

と思ったのですが、なんか変な感じです(笑)

if ([specialLevels containsObject:[NSNumber numberWithInt:currentLevel]]) {
 // other code in here
}
4

2 に答える 2

21

代わりに次のように書くこともできます:

if ([specialLevels containsObject:@(currentLevel)]) {
    // other code in here
}

これは、他のコードのスタイルにより適しています。

于 2013-10-09T19:16:12.250 に答える
14

specialLevels は int の配列ではありません。これは NSNumber オブジェクトの配列です。@2、@4、@6、@8 はそれぞれ、[[NSNumber numberWithInt:value] の呼び出しと同等の NSNumber インスタンスを作成します。また、containsObject を呼び出すときは、NSNumber オブジェクトを渡して、containsObject が値と一致できるようにする必要があります (isEqual: を使用)。

ここで、Objective-C リテラルについて読むことができます。

于 2013-10-09T19:19:17.297 に答える